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