.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "SET TRANSACTION" "" "2005-01-19" "SQL - 言語" "SQL コマンド"
.SH NAME
SET TRANSACTION \- 現在のトランザクションの特性の設定

.SH SYNOPSIS
.sp
.nf
SET TRANSACTION \fItransaction_mode\fR [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION \fItransaction_mode\fR [, ...]

ここで\fItransaction_mode\fRは以下のいずれかです。

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
.sp
.fi
.SH "説明"
.PP
\fBSET TRANSACTION\fRは現在のトランザクションの特性を設定します。
これはその後のトランザクションには影響をおよぼしません。
\fBSET SESSION CHARACTERISTICS\fRは、セッションにおける後続全てのトランザクションのデフォルトのトランザクション特性を設定します。
\fBSET TRANSACTION\fRにより個々のトランザクションのデフォルト特性を上書きすることができます。
.PP
利用可能なトランザクション特性はトランザクションの隔離レベルとトランザクションのアクセスモード(読み書きモードもしくは読み取りのみモード)です。
.PP
以下に示すトランザクションの隔離レベルは、他のトランザクションが並行して実行している時に、そのトランザクションからどのようなデータを見ることができるかを決定するものです。
.TP
\fBREAD COMMITTED\fR
一つの文はそれが開始される前にコミットされた行のみ見ることができます。
これがデフォルトです。
.TP
\fBSERIALIZABLE\fR
現在のトランザクションにおける全ての文は、このトランザクションで最初の問い合わせ文またはデータを変更する文が実行される前にコミットされた行だけを見ることができます。
.PP
標準SQLでは、READ UNCOMMITTEDとREPEATABLE READという、更に2つのレベルを定義しています。
PostgreSQLではREAD UNCOMMITTEDはREAD COMMITTEDとして扱われ、REPEATABLE READはSERIALIZABLEとして扱われます。
.PP
トランザクション隔離レベルは、そのトランザクションにおける最初の問い合わせやデータを変更する文(\fBSELECT\fR、\fBINSERT\fR、\fBDELETE\fR、\fBUPDATE\fR、\fBFETCH\fR、\fBCOPY\fR)が実行された後に変更することはできません。
トランザクションの隔離や同時実行制御についての詳細情報はthe documentationを参照してください。
.PP
トランザクションのアクセスモードは、そのトランザクションが読み書き可能か読み取りのみかを決定します。
デフォルトは読み書き可能です。
読み取りのみのトランザクションでは、書き込み対象のテーブルが一時テーブルでない限り、INSERT、UPDATE、DELETE、および、COPY TOというSQLコマンドを実行できません。
また、CREATE、ALTER、DROP系の全てのSQLコマンド、および、COMMENT、GRANT、REVOKE、TRUNCATEは、読み取りのみのトランザクションでは全く実行できません。
更に、EXPLAIN ANALYZEとEXECUTEは、そのコマンドが上述のコマンドを実行するものであれば、実行できません。
これは、ディスクへの全ての書き込み防止を行わない、高度な読み取りのみの表現方法です。
.SH "注釈"
.PP
\fBSET TRANSACTION\fRを\fBSTART TRANSACTION\fRや\fBBEGIN\fRの前に実行した場合、そのトランザクションは即座に終了しますので、効果は全く現れません。
.PP
代わりに\fBBEGIN\fRあるいは\fBSTART TRANSACTION\fRで目的の\fItransaction_modes\fRを指定することで、\fBSET TRANSACTION\fRを省くことができます。
.PP
セッションのデフォルトのトランザクションモードは、設定パラメータdefault_transaction_isolationとdefault_transaction_read_onlyで設定することができます。
（実際、\fBSET SESSION CHARACTERISTICS\fRはただの冗長なものであり、\fBSET\fRでこれらの変数を設定することと等価です。）
これは、このデフォルトは設定ファイルや\fBALTER DATABASE\fRなどで設定可能であることを意味しています。
詳細はthe documentationを参照してください。
.SH "互換性"
.PP
どちらのコマンドも標準SQLで定義されています。
標準SQLではデフォルトのトランザクションはSERIALIZABLEです。
PostgreSQLでは READ COMMITTEDが通常のデフォルトですが、これは上述の通り変更可能です。
述部ロックが存在しないため、SERIALIZABLEは完璧なシリアライザブルではありません。
詳細はthe documentationを参照してください。
.PP
標準SQLでは、もう一つ、診断領域の大きさという、トランザクション特性があり、このコマンドで設定可能です。
この概念は組み込みSQL固有のものですので、PostgreSQLサーバには実装されていません。
.PP
標準SQLでは、連続する\fItransaction_modes\fRの間にはコンマが必要です。
歴史的な理由よりPostgreSQLではコンマを省略することができます。
