PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PHP:driver PGSQL e AutoCommit?


Primeiro, não há modo AutoCommit no PostgreSQL e as funções pg_* da API PHP não tentam emular um.

doc do pg_query diz

Portanto, garante que pg_query("UPDATE1 ..; UPDATE2...") é executado em uma transação e tem um efeito de tudo ou nada nos dados.

A sequência
pg_query("BEGIN");
pg_query("UPDATE1...");
pg_query("UPDATE2..");
pg_query("COMMIT");

é equivalente a pg_query("UPDATE1 ..; UPDATE2...") no que diz respeito à integridade dos dados (o estado semi-acabado não pode acontecer).

Quanto à nota "a menos que haja BEGIN/COMMIT explícitos...", é relevante apenas se não estiverem no início e no final de toda a cadeia de instruções SQL. Ou seja, pg_query("BEGIN; update1; update2; COMMIT;"); é equivalente a pg_query("update1; update2;") mas (obviamente) não é equivalente a pg_query("update1; COMMIT; update2;")