AUTOCOMMIT

当 AUTOCOMMIT 设置为“on”时,每个 SQL 命令会在成功完成后自动提交;例如:

\set AUTOCOMMIT on

若要在此模式下推迟 COMMIT,请将值设置为 off。

\set AUTOCOMMIT off

如果 AUTOCOMMIT 为空或定义为 off,则 SQL 命令不会提交,除非您显式发出 COMMIT。

注意

  • 默认情况下,AUTOCOMMIT 设置为 off。

  • AUTOCOMMIT 必须为大写,但其值(on 或 off)不区分大小写。

  • 在关闭自动提交模式下,您必须通过输入 ABORT 或 ROLLBACK 来显式放弃任何失败的事务。

  • 如果在未提交的情况下退出会话,将回退您所做的工作。

  • 对 vsql 变量的验证在运行这些变量时进行,而不在设置这些变量时进行。

  • 默认情况下,COPY 语句会在完成后提交,因此使用哪种 AUTOCOMMIT 模式并没什么影响,除非您发出 COPY NO COMMIT。请注意,DDL 语句会自动提交。

  • 若要确定 AUTOCOMMIT 设置为 on 还是 off,请发出以下 set 命令:

    $ \set...
    AUTOCOMMIT = 'off'
    ...
    
  • 如果 SELECT * FROM LOCKS 显示了来自刚才运行的语句的锁,则表示 AUTOCOMMIT 设置为 off。

    $ \set AUTOCOMMIT off
    $ \set
    ...
    AUTOCOMMIT = 'off'
    ...
    SELECT COUNT(*) FROM customer_dimension;
     count
    -------
     50000
    (1 row)
    SELECT node_names, object_name, lock_mode, lock_scope
    FROM LOCKS;
     node_names |      object_name         | lock_mode | lock_scope
    ------------+--------------------------+-----------+-------------
     site01     | Table:customer_dimension | S         | TRANSACTION
    (1 row)