PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Désallocation des requêtes préparées

Lors de la désallocation de l'instruction, la valeur de retour de pg_query indique le succès ou non, comme pour toute "instruction d'utilité". En cas d'échec, il doit renvoyer false. Par exemple :

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

Cela affiche :

Notez que le nom de l'instruction à désallouer ne doit pas être entouré de guillemets simples, car il s'agit d'un identifiant et non d'un littéral de chaîne. S'il doit être inclus en raison de caractères problématiques, cela peut être fait avec pg_escape_identifier (php> =5.4.4)

Pour nettoyer une session, il n'est même pas nécessaire de parcourir les instructions préparées et de les désallouer une par une, vous pouvez appeler DEALLOCATE ALL à la place, toujours avec pg_query .

Il y a aussi une autre déclaration qui fait plus de nettoyage dans une requête :DISCARD ALL

De plus, rien de tout cela n'est même nécessaire si le script se déconnecte vraiment de postgres, puisque les instructions préparées sont locales à leur session parent et meurent avec elle.

Le nettoyage explicite est nécessaire lors de l'utilisation de la réutilisation de connexion entre scripts, soit avec des connexions persistantes par PHP (pg_pconnect ), ou un pooler de connexion comme pgBouncer (bien que le pooler lui-même puisse appeler DISCARD ALL selon sa configuration).