sql >> Base de Datos >  >> RDS >> PostgreSQL

Desasignación de consultas preparadas

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