.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "PREPARE TRANSACTION" "" "2007-05-04" "SQL - 言語" "SQLコマンド"
.SH NAME
PREPARE TRANSACTION \- 二相コミット用に現在のトランザクションを準備する

.SH SYNOPSIS
.sp
.nf
PREPARE TRANSACTION \fItransaction_id\fR
.sp
.fi
.SH "説明"
.PP
\fBPREPARE TRANSACTION\fRは、二相コミット用に現在のトランザクションを準備します。
このコマンドの後、トランザクションは現在のセッションと関連しなくなります。
トランザクションの状態は完全にディスク上に保存され、コミット要求前にデータベースがクラッシュしてしまったとしても、ほとんど確実に正常にコミットできるようになります。
.PP
準備された後、そのトランザクションをCOMMIT PREPARED [\fBcommit_prepared\fR(l)]やROLLBACK PREPARED [\fBrollback_prepared\fR(l)]によりコミットまたはロールバックすることができます。
元のトランザクションを実行したセッションだけではなく、任意のトランザクションからこれらのコマンドを発行することができます。
.PP
コマンドを発行したセッションから見ると、\fBPREPARE TRANSACTION\fRは\fBROLLBACK\fRコマンドと似たような動作をします。
実行した後、実行中の現在のトランザクションはなくなり、準備したトランザクションの効果は不可視になります。
（そのトランザクションがコミットされた場合に効果が可視になります。）
.PP
何らかの原因で\fBPREPARE TRANSACTION\fRコマンドが失敗した場合、\fBROLLBACK\fRが行われます。
つまり、現在のトランザクションが取り消されます。
.SH "パラメータ"
.TP
\fB\fItransaction_id\fB\fR
後で\fBCOMMIT PREPARED\fRや\fBROLLBACK PREPARED\fRでトランザクションを識別するための任意の識別子です。
この識別子は文字列リテラルでなければなりません。また、200バイト未満でなければなりません。
また、その時点で準備されたトランザクションとして使用されている他の識別子と同じものは使用できません。
.SH "注釈"
.PP
このコマンドはトランザクションブロック内で使用しなければなりません。
トランザクションブロックを始めるには、BEGIN [\fBbegin\fR(l)]を使用してください。
.PP
現時点では、一時テーブルを含む操作を行うトランザクションやカーソルをWITH HOLDで作成するトランザクションを\fBPREPARE\fRさせることはできません。
準備したトランザクションで便利に使用するには、これらの機能は現在のセッションにあまりに強く結びついているためです。
.PP
トランザクションで何らかの実行時パラメータが\fBSET\fRで設定されている場合、その影響は\fBPREPARE TRANSACTION\fRの後も残ります。
また、\fBCOMMIT PREPARED\fRや\fBROLLBACK PREPARED\fRの後では、その影響はありません。
したがって、この意味では、\fBPREPARE TRANSACTION\fR は\fBROLLBACK\fRより\fBCOMMIT\fRと似た動きであるといえます。
.PP
その時点で利用できるすべての準備されたトランザクションは\fBpg_prepared_xacts\fRシステムビューで列挙されます。
.PP
性能という点では、トランザクションを長時間準備段階に保持することは推奨できません。
具体的には、これは\fBVACUUM\fRで格納領域を回収する能力に影響します。
また、トランザクションが保持している何らかのロックを保持し続けることも考慮してください。
準備されたトランザクションは通常、別のトランザクションマネージャが他のデータベースでコミットの準備ができたことを確認したらすぐにコミットまたはロールバックされるといった使用方法を想定しています。
.PP
準備されたトランザクションを本格的に使用する場合、（使用しない人にとっての無駄なリソース消費を防ぐために）デフォルトの設定では小さすぎますので、max_prepared_transactionsの値を増やさなければならないかもしれません。
少なくとも、すべてのセッションが準備されたトランザクションを待機できるように、max_connectionsと同値にすることを勧めます。
.SH "例"
.PP
二相コミット用に現在のトランザクションを準備します。
トランザクション識別子としてfoobarを使用します。
.sp
.nf
PREPARE TRANSACTION 'foobar';
.sp
.fi
.SH "関連項目"
COMMIT PREPARED [\fBcommit_prepared\fR(l)], ROLLBACK PREPARED [\fBrollback_prepared\fR(l)]
