【问题标题】:postgresql trigger: disable auto commit and set isolation levelpostgresql 触发器:禁用自动提交并设置隔离级别
【发布时间】:2013-07-29 15:17:57
【问题描述】:

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

【问题讨论】:

  • “禁用自动提交”是什么意思。或者至少,你认为你的意思是什么?

标签: sql postgresql triggers autocommit transaction-isolation


【解决方案1】:

除了嵌入式 SQL,PostgreSQL 没有禁用自动提交的设置。如果您尝试在 PSQL 中关闭自动提交,您将看到类似此错误的内容。

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

改为使用 BEGIN 来启动事务。在 PostgreSQL 中,您可以在单个语句中启动事务并设置隔离级别。 (其他平台需要多个语句。)Skeleton syntax for 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 结束事务。

【讨论】:

    【解决方案2】:

    使用下面的

    \set AUTOCOMMIT off
    

    然后你可以结束

    COMMIT;
    

    【讨论】:

    • 与八年前接受的答案相比,这有什么好处?
    • 我认为这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2018-11-16
    相关资源
    最近更新 更多