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

koyama mlus @ hintmark.com
2006年 7月 4日 (火) 17:13:56 JST


xeon-koyamaです。

石井さん、水野%朝型 さん ご返答ありがとうございます。

説明がヘタですいません。
              接続数(30)  
CLIENT -------- pgpool  --------------  DB1
                        --------------  DB2
                          接続数(30)

※レプリケーションモードのみの場合で
(DB2にはSELECTは発行されない)

pgpoolへの指令が

指令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分

で、

DB1へのINSERT 結果が 

col1 | col2
==============
4    |   AAA
50   |   BBB
102  |   CCC

だったとします。(col1の値自体は、連続していなくても
問題ありません。シーケンスはそういうものだと理解して
います)

私が知りたかったのは、DB2 へのINSERT結果も、

col1 | col2
==============
4    |   AAA
50   |   BBB
102  |   CCC

になるのか という事です。

> 
> 同時セッションが一つに限定されるならば,シーケンス値のずれは発生しませ
> ん.
> READMEは同時セッションが2つ以上の場合を問題にしています.


INSERT を行う前に、
  SELECT nextval('seq')
を行い、col1 へのデータを取得後、

INSERT INTO tb1 VALUES(シーケンス取得値, 'AAA');

をやった場合は、SELECT 文が DB1 のみしか発行されない為、
DB2 の seq シーケンスは、インクリメントされず、その結果
DB1 の seq シーケンスと異なる値になってしまうと考えましたので、
INSERT 時 にしか呼ばれないように、
  DEFAULT nextval('seq')
で定義しました。

pgpoolに、INSERT文が来た場合の、DB1及び、DB2への、それぞれの
実行順番が同じであれば、DB1、とDB2のテーブル内のデータは、
一致していると考えてますが、間違っておりますでしょうか?

上手く説明できていないかもしれませんが、宜しくお願いします。








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