BEGIN — トランザクションブロックを開始する
BEGIN [ WORK | TRANSACTION ] [transaction_mode
[, ...] ]transaction_mode
は以下のいずれかです。 ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
BEGIN
はトランザクションブロックを初期化します。
BEGIN
コマンド以降の文は全て、明示的なCOMMIT
もしくはROLLBACK
が与えられるまで、単一のトランザクションの中で実行されます。
デフォルト(BEGIN
がない場合)は、PostgreSQLはトランザクションを「自動コミット」で実行します。
つまり、各文はそれぞれ固有のトランザクションの中で実行され、文の終わりで暗黙的にコミットが実行されます(これは実行が成功した場合です。失敗した場合はロールバックされます)。
トランザクションブロック内では、文はより迅速に実行されます。 なぜなら、トランザクションの開始やコミットは、CPUとディスクにかなり高い負荷をかけるからです。 また、1つのトランザクションで複数の文を実行することは、複数の関連するテーブルを更新する際、確実に一貫性を保つためにも役立ちます。 関連する更新の中に完了していないものが存在する中間的な状態が、他のセッションから参照できなくなるからです。
分離レベル、読み書きモード、または遅延モードが指定されている場合、新しいトランザクションは、SET TRANSACTION
が実行された時と同様の特性を持ちます。
START TRANSACTION
にはBEGIN
と同じ機能があります。
トランザクションを終了させるにはCOMMIT
またはROLLBACK
を使用してください。
トランザクションブロック内でBEGIN
を発行すると、警告メッセージが表示されます。
ただし、トランザクションの状態には影響ありません。
トランザクションブロック内でトランザクションを入れ子にするには、セーブポイントを使用してください
(詳しくはSAVEPOINTを参照してください)。
後方互換性の保持のため、連続するtransaction_modes
間のカンマは省略することができます。
トランザクションブロックを開始します。
BEGIN;
BEGIN
はPostgreSQLの拡張です。
標準SQLのSTART TRANSACTION
コマンドと等価です。
そのマニュアルページには互換性に関する詳細な情報が含まれます。
DEFERRABLE
transaction_mode
はPostgreSQLの言語拡張です。
埋め込みSQLでは、BEGIN
というキーワードを異なった目的に使用しています。
データベースアプリケーションを移植する時は、トランザクションの意味で使用されているのかどうかに注意してください。