sql >> Base de Datos >  >> RDS >> PostgreSQL

PHP:controlador PGSQL y AutoCommit?

En primer lugar, no existe el modo AutoCommit en PostgreSQL y las funciones pg_* de la API de PHP no intentan emular uno.

doc de pg_query dice

Así que garantiza que pg_query("UPDATE1 ..; UPDATE2...") se ejecuta en una transacción y tiene un efecto de todo o nada en los datos.

La secuencia

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

es equivalente a pg_query("UPDATE1 ..; UPDATE2...") con respecto a la integridad de los datos (el estado a medio terminar no puede ocurrir).

En cuanto a la nota "a menos que haya BEGIN/COMMIT explícito...", es relevante solo si estos no están al principio y al final de toda la cadena de sentencias SQL. Es decir, pg_query("BEGIN; update1; update2; COMMIT;"); es equivalente a pg_query("update1; update2;") pero (obviamente) no es equivalente a pg_query("update1; COMMIT; update2;")