teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

2相コミットはDDL文に対しても可能な旨、コメントを追記しました

2015/10/21 08:33

投稿

退会済みユーザー
answer CHANGED
@@ -5,6 +5,9 @@
5
5
  やり方は以下の通りです。
6
6
  (1) beginメソッドによってトランザクションを開始する
7
7
  (2) insert,update,delete等でデータベースに対する更新を実行する
8
+   [2015/10/21 17:32追記]
9
+   または、alter等でテーブル定義の更新を実行する
10
+   ※PostgreSQLはalter等のDDL文にもトランザクションが利用できます
8
11
  (3) prepare transactionコマンドによって2相コミットを開始する
9
12
  例)prepare transaction 'transaction_id_00000001';
10
13
  (4) 対象となるすべてのDBに対して(1)-(3)を実行する
@@ -24,6 +27,9 @@
24
27
  begin;
25
28
  insert into employee values (1, 'ariaki', true);
26
29
  insert into employee values (2, 'foobar', true);
30
+ -- [2015/10/21 17:32追記]
31
+ -- トランザクション内で以下のようにDDL文が利用できます
32
+ alter table employee add column joined date not null;
27
33
  prepare transaction 'tran20151021164600';
28
34
  commit prepared 'tran20151021164600';
29
35