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

PHP:PGSQL-Treiber und AutoCommit?

Erstens gibt es in PostgreSQL keinen AutoCommit-Modus und die pg_*-Funktionen der PHP-API versuchen nicht, einen zu emulieren.

doc von pg_query sagt

Es garantiert also, dass pg_query("UPDATE1 ..; UPDATE2...") wird in einer Transaktion ausgeführt und hat einen Alles-oder-nichts-Effekt auf die Daten.

Die Sequenz

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

entspricht pg_query("UPDATE1 ..; UPDATE2...") hinsichtlich der Datenintegrität (Halbfertigzustand kann nicht vorkommen).

Der Hinweis „es sei denn, es gibt explizit BEGIN/COMMIT...“ ist nur relevant, wenn diese nicht am Anfang und am Ende der gesamten Kette von SQL-Anweisungen stehen. Das heißt, pg_query("BEGIN; update1; update2; COMMIT;"); entspricht pg_query("update1; update2;") aber (offensichtlich) nicht äquivalent zu pg_query("update1; COMMIT; update2;")