postgresql trigger:禁用自动提交并设置隔离级别

时间:2013-07-29 15:17:57

标签: sql postgresql triggers autocommit transaction-isolation

我正在对表上的数据库INSTEAD OF INSERT写一个触发器,它进行了一些操作,然后将数据插入到不同的相关表中。现在我需要禁用自动提交并在触发器内设置不同的隔离级别,我该怎么办?

1 个答案:

答案 0 :(得分:6)

PostgreSQL没有禁用自动提交的设置,但嵌入式SQL除外。如果你尝试在PSQL中设置autocommit,你会看到类似这样的错误。

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

相反,使用BEGIN开始交易。在PostgreSQL中,您可以启动事务并在单个语句中设置隔离级别。 (其他平台需要多个语句。)PostgreSQL 9.2的Skeleton syntax

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结束事务。