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

PHP:driver PGSQL e AutoCommit?

Innanzitutto, non esiste la modalità AutoCommit in PostgreSQL e le funzioni pg_* dell'API PHP non tentano di emularne una.

doc di pg_query dice

Quindi garantisce che pg_query("UPDATE1 ..; UPDATE2...") viene eseguito in una transazione e ha un effetto tutto o niente sui dati.

La sequenza

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

è equivalente a pg_query("UPDATE1 ..; UPDATE2...") per quanto riguarda l'integrità dei dati (non può verificarsi lo stato semilavorato).

Per quanto riguarda la nota "a meno che non ci siano BEGIN/COMMIT espliciti...", è rilevante solo se questi non sono all'inizio e alla fine dell'intera catena di istruzioni SQL. Ovvero, pg_query("BEGIN; update1; update2; COMMIT;"); è equivalente a pg_query("update1; update2;") ma (ovviamente) non equivalente a pg_query("update1; COMMIT; update2;")