SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
このコマンドはトランザクションの隔離レベルを設定します。SET TRANSACTION コマンドは現在の SQL-トランザクションの振る舞いを設定します。 これはどんな後のトランザクションにも影響をおよぼしません.このコマンドはトランザクションで最初の問い合わせ文、または、DML文 (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) が実行された後には使うことはできません。SET SESSION CHARACTERISTICSはそれぞれのセッションのトランザクションのデフォルトのトランザクションの隔離レベルを設定します。SET TRANSACTIONで個々のトランザクションの隔離レベルを変更することができます。
トランザクションの隔離レベルは他のトランザクションが並行して実行している時、トランザクションがどんなデータを見ることができるかを決定するものです。
一つの文はそれが開始される前にコミットされた行のみ見ることができます。これがデフォルトです。
現在のトランザクションはこのトランザクションで最初の問い合わせ文または DML 文が実行される前にコミットされた行だけを見ることができます。
Tip: 直感的に言うと、シリアライザブルでは、二つの同時に実行されたトランザクションが作り出したデータベースの状態が、あたかもそれぞれが順に実行した場合と同じになるようになります。
セッションのデフォルトのトランザクション隔離レベルは、次のコマンド:
SET default_transaction_isolation = 'value'
および設定ファイル内で設定できます。より詳細については、管理者用ガイドを参照して下さい。
SERIALIZABLE は SQL における標準のレベルです。PostgreSQL は READ UNCOMMITTED と REPEATABLE READ という隔離レベルを提供していません。 MVCC (多版型同時実行制御) があるので、SERIALIZABLE レベルは厳密にはシリアライザブルではありません。詳細はユーザガイドを参照してください。
SQL ではこれらのコマンドでセットすることができる他の二つのトランザクションの特性があります。トランザクションが読み取り専用であるかどうかということと診断領域のサイズです 。これらの概念は PostgreSQL ではサポートされていません。