PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

De-allocazione delle query preparate

Durante la deallocazione dell'istruzione, il valore di ritorno di pg_query indica successo o meno, come per qualsiasi "dichiarazione di utilità". In caso di errore dovrebbe restituire false. Ad esempio:

 if (!pg_query($cnx, "deallocate foobar")) {
   echo "Error deallocate: " . pg_last_error($cnx);
 }
 else {
  echo "deallocate successful";
 }

Viene visualizzato:

Nota che il nome dell'istruzione da deallocare non deve essere racchiuso tra virgolette singole, perché è un identificatore, non una stringa letterale. Se deve essere racchiuso a causa di caratteri problematici, può essere fatto con pg_escape_identifier (php> =5.4.4)

Per ripulire una sessione, non è nemmeno necessario scorrere le istruzioni preparate e deallocarle una per una, puoi chiamare DEALLOCATE ALL invece, sempre con pg_query .

C'è anche un'altra istruzione che fa più pulizia in una query:DISCARD ALL

Inoltre, nulla di tutto ciò è nemmeno necessario se lo script si disconnette davvero da postgres, poiché le istruzioni preparate sono locali nella loro sessione genitore e muoiono con essa.

La pulizia esplicita è necessaria quando si utilizza il riutilizzo della connessione tra script, sia con connessioni persistenti tramite PHP (pg_pconnect ) o un pool di connessioni come pgBouncer (sebbene il pooler stesso possa chiamare DISCARD ALL a seconda della sua configurazione).