[pgsql-jp: 37329] popoolとシーケンスキー

koyama mlus @ hintmark.com
2006年 7月 4日 (火) 02:47:06 JST


xeon-koyamaです。

Pgpool のレプリケーション動作で質問させてください


>レプリケーションについて

>同じ問い合わせを送っても異なる結果を返すようなデータ,
>たとえば乱数やトランザクションID,OID,SERIAL,シーケンス,
>CURRENT_TIMETSTAMPのようなものに関する問い合わせを
>レプリケーションすることはできません
>(正確には,同じ値でレプリケーションされる保証がありません)
>SERIALやシーケンスに関しては,関連テーブルをロックする
>ことによって回避することもできます.

という説明がありますが、例えば

CREATE SEQUENCE seq1;

CREATE TABLE tb1 (
  col_1 INTEGER NOT NULL DEFAULT nextval('seq1') PRIMARY KEY,
  col_2 VARCHAR(10)
);

の場合、常に INSERT 文を 

INSERT INTO tb1(col_2) VALUES('AAAA');

の利用に限定した場合(シーケンスでキーを作成させる)

以下のレプリケーションの構成で、キーがずれる事がありますか?
※データ参照は、常に Postgres1 で行うので、負荷分散は利用しない

CLIENT -------- pgpool  --------------  DB1
                        --------------  DB2

私の考えだと、pgpoolにINSERT 文が入った場合、

指令1--> INSERT INTO tb1(col_2) VALUES('AAA');  9:50分
指令2-->  INSERT INTO tb1(col_2) VALUES('BBB');  9:51分
指令3-->  INSERT INTO tb1(col_2) VALUES('CCC'): 9:52分

指令1から3までが順番にDB1,DB2 それぞれに対して行われれば、
必ずキーは一致すると思っておりますが、
PGPOOLの場合、DB1への入力は順番通りにINSERT を行い、
DB2への入力は、順不同でおこなわれた場合、キーがずれる事になります。

PGPOOLの冒頭での説明は、これを言っているのでしょうか?

ご存じの方がいらっしゃいましたら、ご返答宜しくお願いします。































pgsql-jp メーリングリストの案内