PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Zuordnung vorbereiteter Abfragen aufheben

Beim Freigeben der Anweisung der Rückgabewert von pg_query zeigt Erfolg an oder nicht, wie bei jeder "Nutzungsaussage". Bei einem Fehler sollte es false zurückgeben. Zum Beispiel:

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

Dies zeigt:

Beachten Sie, dass der Name der aufzuhebenden Anweisung nicht in einfache Anführungszeichen gesetzt werden darf, da es sich um einen Bezeichner und nicht um ein Zeichenfolgenliteral handelt. Sollte es wegen problematischer Zeichen eingeschlossen werden müssen, kann dies mit pg_escape_identifier (php> =5.4.4)

Um eine Sitzung aufzuräumen, ist es nicht einmal notwendig, die vorbereiteten Anweisungen zu durchlaufen und sie einzeln aufzuheben, Sie können DEALLOCATE ALL stattdessen immer noch mit pg_query .

Es gibt auch eine andere Anweisung, die mehr Aufräumarbeiten in einer Abfrage durchführt:DISCARD ALL

Außerdem ist nichts davon notwendig, wenn sich das Skript wirklich von Postgres trennt, da vorbereitete Anweisungen lokal in ihrer übergeordneten Sitzung sind und mit ihr sterben.

Die explizite Bereinigung ist notwendig, wenn die Wiederverwendung von Verbindungen zwischen Skripten verwendet wird, entweder mit dauerhaften Verbindungen durch PHP (pg_pconnect ) oder einen Verbindungspooler wie pgBouncer (obwohl der Pooler selbst DISCARD ALL aufrufen kann je nach Konfiguration).