2013-07-29 2 views
2

Я пишу триггер в базе данных INSTEAD OF INSERT На таблице, которая сделала некоторую операцию, затем вставьте данные в разные связанные таблицы. Теперь мне нужно отключить autocommit и установить другой уровень изоляции внутри триггера, как я могу это сделать?postgresql trigger: отключить автоматическую фиксацию и установить уровень изоляции

+1

Что вы подразумеваете под "disable autocommit". Или, по крайней мере, как вы думаете, что вы подразумеваете под этим? –

ответ

6

В PostgreSQL отсутствует параметр, который отключает автозаполнение, за исключением встроенного SQL. Если вы попытаетесь отключить автокоммутацию, скажем, PSQL, вы увидите что-то подобное этой ошибке.

sandbox=# set autocommit=off; 
ERROR: SET AUTOCOMMIT TO OFF is no longer supported 

Вместо этого используйте BEGIN для начала транзакции. В PostgreSQL вы можете начать транзакцию и установить уровень изоляции в одном выражении. (Другие платформы требуют несколько операторов.) Skeleton syntax для PostgreSQL 9.2

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] 

where transaction_mode is one of: 

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | 
         READ COMMITTED | READ UNCOMMITTED } 
    READ WRITE | READ ONLY 
    [ NOT ] DEFERRABLE 

Завершить сделку с любым COMMIT или ROLLBACK.

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