2

データベース INSTEAD OF INSERT ON テーブルにトリガーを作成し、何らかの操作を行ってから、関連する別のテーブルにデータを挿入します。自動コミットを無効にし、トリガー内で別の分離レベルを設定する必要があります。どうすればよいですか?

4

2 に答える 2

8

PostgreSQL には、組み込み SQL を除いて、自動コミットを無効にする設定はありません。たとえば、PSQL で自動コミットをオフに設定しようとすると、次のようなエラーが表示されます。

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

代わりに、BEGIN を使用してトランザクションを開始してください。PostgreSQL では、トランザクションを開始し、単一のステートメントで分離レベルを設定できます。(他のプラットフォームでは複数のステートメントが必要です。) 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 でトランザクションを終了します。

于 2013-07-30T01:38:44.383 に答える