代码之家  ›  专栏  ›  技术社区  ›  Kjetil S.

自动提交关闭、开始并警告正在进行的事务

  •  0
  • Kjetil S.  · 技术社区  · 7 年前

    我喜欢把这个放在我的口袋里 ~/.psqlrc :

    \set autocommit off
    

    我也喜欢在我的头顶上 filename.sql 脚本:

    BEGIN;
    

    ...以防这些脚本由使用自动提交的其他人运行。

    然而,这会发出警告:

    WARNING:  there is already a transaction in progress
    

    我怎样才能关掉那些恼人的警告?有什么 BEGIN IF NOT ALREADY BEGUN 命令

    1 回复  |  直到 7 年前
        1
  •  5
  •   Laurenz Albe    7 年前

    你的两种设置相互矛盾。

    如果在中启用自动提交模式 psql ,您的脚本应该如下所示:

    -- statement 1
    -- statement 2
    ...
    COMMIT;
    -- statement 3
    ...
    COMMIT;
    

    这是因为自动提交模式会自动添加 BEGIN 在第一句话之前,在每句话之后 COMMIT 或 ROLLBACK . 这是因为PostgreSQL没有自动提交模式,所以 psql 是“假装的”。

    现在如果你的脚本以 开始 ,这将导致两个 开始 s紧跟在一起,这将导致观察到的警告。

    也许你最好从

    \set autocommit on
    

    确保一切都是一致的。

    推荐文章