[pgsql-jp: 36707] pgpool使用時のSERIAL型の取り扱いについて

Motoki Ito m_itoux @ yahoo.co.jp
2006年 2月 9日 (木) 10:42:02 JST


伊藤と申します。

pgpool 2.6にてSERIAL型を含むテーブルの同期を取ることができるようになった
と認識しておりますが、下記SQLを発行した場合同期がとれず困っております。
select nextval('hoge_seq')
環境としてはDBサーバAをマスタとし(PostgreSql+pgpool)でDBサーバ
B(PostgreSqlのみ)をセカンダリとしています。

いろいろ試した結果以下の2つの方法ではPHPプログラムからでも、psql上からで
も同期がとれました。SQL発行はDBサーバAのport5432に見えるPostgreSqlです。
成功例1
begin
select nextval('hoge_seq')
commit

成功例2
/*INSERT LOCK*/ select nextval('hoge_seq')

例2の記述=insert_lockディレクティブがtrueと認識していましたが間違ってい
るのでしょうか?
可能であれば、明示的にトランザクションを掛けたり/*INSERT LOCK*/を記述し
たくなく、いい解決があればと思っています。
また、成功例1についてはトランザクション内ですがロックを掛けておりません。
これでもうまくいってしまうのもよくわかりませんでした。

pgpoolの設定ミスかも知れませんが、ご存知の方がいらっしゃいましたら、ご教
授ください。

ちなみにpgpoolの設定は下記のようになります。
(以下はpool_statusで表示された中から関係なさそうなのを省いた物です。)
 port                         | 5432          
 socket_dir                   | /tmp          
 backend_host_name            | 192.168.0.201 
 backend_port                 | 5431          
 secondary_backend_host_name  | 192.168.0.202 
 secondary_backend_port       | 5431          
 connection_life_time         | 0             
 replication_mode             | 1             
 replication_strict           | 1             
 replication_timeout          | 5000          
 load_balance_mode            | 1             
 replication_stop_on_mismatch | 0             
 print_timestamp              | 1             
 master_slave_mode            | 0             
 connection_cache             | 1             
 insert_lock                  | 1             
 current_backend_host_name    | 192.168.0.201 
 current_backend_port         | 5431          
 replication_enabled          | 1             
 master_slave_enabled         | 0             

--------------------------------------
GANBARE! NIPPON!
Yahoo! JAPAN JOC OFFICIAL INTERNET PORTAL SITE PARTNER
http://pr.mail.yahoo.co.jp/ganbare-nippon/



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