Ao desalocar a instrução, o valor de retorno de
pg_query
indica sucesso ou não, como para qualquer "declaração de utilidade". Em caso de falha, deve retornar false. Por exemplo: if (!pg_query($cnx, "deallocate foobar")) {
echo "Error deallocate: " . pg_last_error($cnx);
}
else {
echo "deallocate successful";
}
Isso exibe:
Observe que o nome da instrução a ser desalocada não deve estar entre aspas simples, porque é um identificador, não um literal de string. Caso precise ser incluído devido a caracteres problemáticos, isso pode ser feito com
pg_escape_identifier
(php>
=5.4.4) Para limpar uma sessão, nem é necessário iterar sobre as instruções preparadas e desalocá-las uma a uma, você pode chamar
DEALLOCATE ALL
em vez disso, ainda com pg_query
. Há também outra declaração que faz mais limpeza em uma consulta:
DISCARD ALL
Além disso, nada disso é necessário se o script realmente se desconectar do postgres, já que as instruções preparadas são locais para sua sessão pai e morrem com ela.
A limpeza explícita é necessária ao usar a reutilização de conexão entre scripts, seja com conexões persistentes por PHP (
pg_pconnect
), ou um pool de conexões como pgBouncer
(embora o próprio pooler possa chamar DISCARD ALL
dependendo de sua configuração).