2012-03-14 3 views
4

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

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

Также интересен вопрос, что делать pg_query фиксация после выполнения?

Например:

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, поэтому начинать и совершать все-таки?

Спасибо за вашу помощь: дд

ответ

8

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

pg_query-х doc говорит

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

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

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

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

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

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

+0

Как насчет этого, это новая функция? http://www.postgresql.org/docs/9.3/static/ecpg-sql-set-autocommit.html – Eddified

+0

@ Исправлено: нет, это уже давно. [ECPG] (http://www.postgresql.org/docs/current/static/ecpg.html) неявно открывает транзакции и называется «autcommit off off». См. [Управление транзакциями] (http://www.postgresql.org/docs/current/static/ecpg-commands.html#ECPG-TRANSACTIONS) –

Смежные вопросы