COMMIT

COMMIT コマンドは、現在のトランザクション中に行われたすべてのデータベース更新を永続的にし、現在のトランザクションを終了します。

COMMIT [ WORK ];

COMMIT コマンドは、匿名ブロック、ストアドプロシージャ、または関数内で使用できます。SPLプログラム内では、実行可能セクションおよび/または例外セクションに表示される場合があります。

次の例では、匿名ブロックの3番目の INSERT コマンドはエラーになります。最初の2つの INSERT コマンドの効果は、最初の SELECT コマンドが示すように保持されます。 ROLLBACK コマンドを発行した後でも、2行が実際にコミットされたことを確認する2番目の SELECT コマンドが示すように、テーブルに残ります。

注釈

以下の例に示す edb_stmt_level_tx 構成パラメータは、 ALTER DATABASE コマンドを使用してデータベース全体に設定するか、 postgresql.conf ファイルで変更してデータベースサーバー全体に設定できます。

\set AUTOCOMMIT off
SET edb_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)