COMMIT 命令使當前事務期間執行的所有數據庫更新永久化,并結束當前事務。

COMMIT [ WORK ];

COMMIT 命令可在匿名塊、存儲過程或函數中使用。在 SPL 程序內,它可出現在可執行部分和/或異常部分中。

在以下示例中,匿名塊中的第三個 INSERT 命令導致錯誤。前兩個 INSERT 命令的效果將保留,如第一個 SELECT 命令的輸出所示。即使在發出 ROLLBACK 命令后,這兩行仍保留在表中,這驗證了它們確實已提交,如第二個 SELECT 命令的輸出所示。

說明 可通過使用 ALTERDATABASE 命令為整個數據庫設置 polar_comp_stmt_level_tx 配置參數(如以下示例所示),也可通過在 Postgresql.conf 文件中對其進行更改,為整個數據庫服務器設置該參數。
\set AUTOCOMMIT off
SET polar_comp_stmt_level_tx TO on;

BEGIN
    INSERT INTO dept VALUES (50, 'FINANCE', 'DALLAS');
    INSERT INTO dept VALUES (60, 'MARKETING', 'CHICAGO');
    COMMIT;
    INSERT INTO dept VALUES (70, 'HUMAN RESOURCES', 'CHICAGO');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);
END;

SQLERRM: value too long for type character varying(14)
SQLCODE: 22001

SELECT * FROM dept;

deptno |   dname    |   loc
--------+------------+----------
     10 | ACCOUNTING | NEW YORK
     20 | RESEARCH   | DALLAS
     30 | SALES      | CHICAGO
     40 | OPERATIONS | BOSTON
     50 | FINANCE    | DALLAS
     60 | MARKETING  | CHICAGO
(6 rows)

ROLLBACK;

SELECT * FROM dept;

deptno |   dname    |   loc
--------+------------+----------
     10 | ACCOUNTING | NEW YORK
     20 | RESEARCH   | DALLAS
     30 | SALES      | CHICAGO
     40 | OPERATIONS | BOSTON
     50 | FINANCE    | DALLAS
     60 | MARKETING  | CHICAGO
(6 rows)