Al desasignar la instrucción, el valor de retorno de pg_query
indica éxito o no, como para cualquier "declaración de utilidad". En caso de falla, debería devolver falso. Por ejemplo:
if (!pg_query($cnx, "deallocate foobar")) {
echo "Error deallocate: " . pg_last_error($cnx);
}
else {
echo "deallocate successful";
}
Esto muestra:
Tenga en cuenta que el nombre de la declaración para desasignar no debe estar entre comillas simples, porque es un identificador, no una cadena literal. Si es necesario encerrarlo debido a caracteres problemáticos, se puede hacer con pg_escape_identifier
(php>
=5.4.4)
Para limpiar una sesión, ni siquiera es necesario iterar sobre las declaraciones preparadas y desasignarlas una por una, puede llamar a DEALLOCATE ALL
en cambio, todavía con pg_query
.
También hay otra declaración que hace más limpieza en una consulta:DISCARD ALL
Además, nada de esto es necesario si el script realmente se desconecta de postgres, ya que las declaraciones preparadas son locales para su sesión principal y mueren con ella.
La limpieza explícita es necesaria cuando se usa la reutilización de conexiones entre scripts, ya sea con conexiones persistentes por PHP (pg_pconnect
), o un agrupador de conexiones como pgBouncer
(aunque el pooler mismo puede llamar a DISCARD ALL
dependiendo de su configuración).