無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

PREPARE TRANSACTION

名前

PREPARE TRANSACTION -- 二相コミット用に現在のトランザクションを準備する

概要

PREPARE TRANSACTION 

transaction_id

説明

PREPARE TRANSACTION は、二相コミット用に現在のトランザクションを準備します。 このコマンドの後、トランザクションは現在のセッションと関連しなくなります。 トランザクションの状態は完全にディスク上に保存され、コミット要求前にデータベースがクラッシュしてしまったとしても、ほとんど確実に正常にコミットできるようになります。

準備された後、そのトランザクションを COMMIT PREPARED ROLLBACK PREPARED によりコミットまたはロールバックすることができます。 元のトランザクションを実行したセッションだけではなく、任意のトランザクションからこれらのコマンドを発行することができます。

コマンドを発行したセッションから見ると、 PREPARE TRANSACTION ROLLBACK コマンドと似たような動作をします。 実行した後、実行中の現在のトランザクションはなくなり、準備したトランザクションの効果は不可視になります。 (そのトランザクションがコミットされた場合に効果が可視になります。)

何らかの原因で PREPARE TRANSACTION コマンドが失敗した場合、 ROLLBACK が行われます。 つまり、現在のトランザクションが取り消されます。

パラメータ

transaction_id

後で COMMIT PREPARED ROLLBACK PREPARED でトランザクションを識別するための任意の識別子です。 この識別子は文字列リテラルでなければなりません。また、200バイト未満でなければなりません。 また、その時点で準備されたトランザクションとして使用されている他の識別子と同じものは使用できません。

注釈

PREPARE TRANSACTION はアプリケーションや対話式のセッションでの使用を目的としていません。 この目的は、外部トランザクションマネージャにより、複数のデータベースやその他のトランザクションを持つリソースを跨るグローバルなトランザクションを原始的に実現できるようにすることです。 トランザクションマネージャを作成しているのでなければ、おそらく PREPARE TRANSACTION を使用してはなりません。

このコマンドはトランザクションブロック内で使用しなければなりません。 トランザクションブロックを始めるには、 BEGIN を使用してください。

現時点では、一時テーブルを含む操作を行うトランザクションやカーソルを WITH HOLD で作成するトランザクション、 LISTEN または UNLISTEN を実行するトランザクションを PREPARE させることはできません。 準備したトランザクションで便利に使用するには、これらの機能は現在のセッションにあまりに強く結びついているためです。

トランザクションで何らかの実行時パラメータが( LOCAL オプションなしの) SET で設定されている場合、その影響は PREPARE TRANSACTION の後も残ります。 また、 COMMIT PREPARED ROLLBACK PREPARED の後では、その影響はありません。 したがって、この意味では、 PREPARE TRANSACTION ROLLBACK より COMMIT と似た動きであるといえます。

その時点で利用できるすべての準備されたトランザクションは pg_prepared_xacts システムビューで列挙されます。

注意

トランザクションを長期間準備された状態のままとすることは勧められません。 これは格納領域を回収する VACUUM 機能と相互作用し、極端な場合では、トランザクションの周回( 項23.1.5 参照)を回避するためにデータベースを停止させてしまいます。 またトランザクションが保持している何からのロックを保持し続けていることにも注意してください。 外部トランザクションマネージャが他のデータベースがコミットの準備をしたと検証した後すぐに、準備されたトランザクションは通常コミットまたはロールバックされることがこの機能の想定している使用方法です。

準備されたトランザクションを追跡し、その終了を即座に確認できるように外部トランザクションマネージャを設定していない場合、 max_prepared_transactions をゼロに設定して準備されたトランザクション機能を無効にしておくことが最善です。 こうすれば事故により準備されたトランザクションが作成され、忘れられた結果問題を引き起こすことを防ぐことができます。

二相コミット用に現在のトランザクションを準備します。 トランザクション識別子として foobar を使用します。

PREPARE TRANSACTION 'foobar';

互換性

PREPARE TRANSACTION PostgreSQL の拡張です。 これは外部のトランザクション管理システムによる利用を意図したものです。 トランザクション管理システムの一部(X/Open XAなど)は標準化されていますが、こうしたシステムのSQL側は標準化されていません。

関連項目

COMMIT PREPARED , ROLLBACK PREPARED

powered by SEO.CUG.NET