Po pierwsze, nie ma trybu AutoCommit w PostgreSQL, a funkcje pg_* API PHP nie próbują go emulować.
doc mówi
Gwarantuje to, że pg_query("UPDATE1 ..; UPDATE2...")
wykonuje w jednej transakcji i ma wpływ na dane wszystko albo nic.
Sekwencja
pg_query("BEGIN");
pg_query("UPDATE1...");
pg_query("UPDATE2..");
pg_query("COMMIT");
jest odpowiednikiem pg_query("UPDATE1 ..; UPDATE2...")
w odniesieniu do integralności danych (stan w połowie ukończony nie może się zdarzyć).
Jeśli chodzi o uwagę „chyba że istnieją wyraźne BEGIN/COMMIT...”, ma to znaczenie tylko wtedy, gdy nie są one na początku i na końcu całego łańcucha instrukcji SQL. Oznacza to, że pg_query("BEGIN; update1; update2; COMMIT;");
jest odpowiednikiem pg_query("update1; update2;")
ale (oczywiście) nie jest odpowiednikiem pg_query("update1; COMMIT; update2;")