[pgcluster: 433] トランザクション中のパーサエラーがクラス間の整合性を崩す可能性有

Wataru Oguro oguro @ zenrin-datacom.net
2004年 8月 3日 (火) 16:40:11 JST


oguroです。

お世話になっております。
107av10のリリースお疲れ様でした。>三谷様
早速ですが、試してみました。

ご報告した2点については改善されているのを確認いたしました。
ただ(リリースしたばかりで申し訳ないですが)もう一つ発見しましたので、ご
報告いたします。

・RedHatLinux7.3(クラスタサーバ2台、レプリケーションサーバ1台)
・PGCluster1.0.7av10

上記環境でトランザクション中にパーサエラーを発生させると、クエリーを発行したクラスタサーバ以外のクラスタサーバには、トランザクションで実行したクエリーが反映されるようです。
(実際にはパーサエラー以降はcommitかrollbackしかないのですが)

具体的な手順は以下の通りです。

1.DBに接続(クラスタサーバ1、2)
 psql test

2.insert文を発行(クラスタサーバ1)
 begin;
 insert into test values('105');

3.データを確認(クラスタサーバ1)
 select * from test;

    a
  -----
   105
  (1 row)

4.パーサエラーを発生させる(クラスタサーバ1)
  aaa;

  ERROR:  parser: parse error at or near "aaa" at character 1

5.データを確認(クラスタサーバ1)
  select * from test;

  ERROR:  current transaction is aborted, queries ignored until end of transaction block

  当然ですが、実行できません。

6.トランザクションをコミット(クラスタサーバ1)
  commit;

7.データを確認(クラスタサーバ1,2)
  select * from test;

  /*  クラスタサーバ1の結果  */ ->commitはしたが、パーサエラーのためトランザクションは無効になっているため、意図する結果が得られました。
   a
  ---
  (0 rows)

  /* クラスタサーバ2の結果  */ ->クラスタサーバ1で発行したトランザクションが生きており、commitが実行されてデータが登録されているように見えます。
    a
  -----
   105
  (1 row)

パーサエラーが出るのにcommitすることはまずないと思うのですが。。。
お忙しいでしょうがご確認の程よろしくお願いいたします。





pgcluster メーリングリストの案内