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

PHP :pilote PGSQL et AutoCommit ?

Premièrement, il n'y a pas de mode AutoCommit dans PostgreSQL et les fonctions pg_* de l'API PHP n'essaient pas d'en émuler un.

doc de pg_query dit

Il garantit donc que pg_query("UPDATE1 ..; UPDATE2...") s'exécute en une seule transaction et a un effet tout ou rien sur les données.

La séquence

pg_query("BEGIN");
pg_query("UPDATE1...");
pg_query("UPDATE2..");
pg_query("COMMIT");

est équivalent à pg_query("UPDATE1 ..; UPDATE2...") en ce qui concerne l'intégrité des données (l'état semi-fini ne peut pas se produire).

Quant à la note "à moins qu'il n'y ait des instructions BEGIN/COMMIT... explicites", elle n'est pertinente que si celles-ci ne se trouvent pas au début et à la fin de toute la chaîne d'instructions SQL. C'est-à-dire, pg_query("BEGIN; update1; update2; COMMIT;"); est équivalent à pg_query("update1; update2;") mais (évidemment) pas équivalent à pg_query("update1; COMMIT; update2;")