[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 メーリングリストの案内