PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Desalocando consultas preparadas


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).