PHP: драйвер PGSQL и AutoCommit?

Я использую pg_connect и pg_query в проекте. Но я действительно не уверен, что это pg_connect, используя режим AutoCommit или нет?

Это важный вопрос, потому что мне нужно написать какой-то блок по транзакции, и если один из операторов будет проигнорирован сервером, база данных будет непоследовательной …

Также интересный вопрос, который делает pg_query commit после выполнения?

Например:

pg_query('begin; update table1...; update table2...; commit'); 

такое же, как

 pg_query('begin;'); pg_query('update table1...;'); pg_query('update table2...;'); pg_query('commit'); 

и является

 pg_query('begin; update table1...; update table2...; commit'); 

работая в режиме AutoCommit, поэтому начать и совершить все же?

Благодарим за помощь: dd

Во-первых, в PostgreSQL нет режима AutoCommit, а функции pg_ * PHP API не пытаются имитировать.

Документ pg_query сообщает

Когда несколько операторов передаются функции, они автоматически выполняются как одна транзакция, если в строке запроса не указаны явные команды BEGIN / COMMIT

Поэтому он гарантирует, что pg_query("UPDATE1 ..; UPDATE2...") выполняется в одной транзакции и оказывает на данные все или ничего.

Последовательность

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

эквивалентно pg_query("UPDATE1 ..; UPDATE2...") отношении целостности данных ( pg_query("UPDATE1 ..; UPDATE2...") состояние не может быть выполнено).

Что касается примечания «если нет явного BEGIN / COMMIT …», это имеет значение только в том случае, если они не находятся в начале и конце всей цепочки операторов SQL. То есть pg_query("BEGIN; update1; update2; COMMIT;"); эквивалентно pg_query("update1; update2;") но (очевидно) не эквивалентен pg_query("update1; COMMIT; update2;")