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