[pgsql-jp: 33175] Re: pgpool-1.2.3のreplication_strict がfalseにできません。
Tatsuo Ishii
t-ishii @ sra.co.jp
2004年 6月 8日 (火) 16:22:37 JST
石井です.
> pgpoolの1.2.3(FreeBSD-5.2.1)ですが。
>
> replication_strictをfalseにしても
>
> show pool_status
> でみると。
> replication_strict | 1 | non 0 if operating in
> strict mode
>
> のままです。
失礼しました.以下のパッチで直ると思います.
Index: pool_config.l
===================================================================
RCS file: /home/t-ishii/repository/pgpool/pool_config.l,v
retrieving revision 1.11
diff -c -r1.11 pool_config.l
*** pool_config.l 18 Apr 2004 09:37:46 -0000 1.11
--- pool_config.l 8 Jun 2004 06:54:08 -0000
***************
*** 378,383 ****
--- 378,385 ----
pool_error("pool_config: %s must be true or false", key);
return(-1);
}
+ else
+ pool_config.replication_strict = 0;
}
else if (!strcmp(key, "replication_timeout"))
{
> そもそもなんでFalseにしたいかと言うと
>
> PHPで語でいうと、INSERT後に、pg_last_oidすると、エラーになるからです。
> (INSERTはrepricateされています)
これは関係ないですね.こちらではstrictモードでも
<?php
$con = pg_connect("dbname=test port=9999");
$res = pg_query($con, "insert into t1 values(1)");
echo pg_last_oid($res);
?>
でpg_last_oid()が動いています.
そもそもpg_last_oid()は結局 libpqのPQoidStatus()を呼び出しているだけで,
PQoidStatus()は直前のINSERTが返したOIDをメモリに覚えておいたのを返して
いるだけなので,INSERTが成功していれば必ず成功するはずです,
pg_last_oid()が失敗しているのは別の問題でしょう.
> これはpgpoolがoidのreplicationに対応できないのがそもそもの問題で、strict
> modeを外しても(マスターとスレーブのOIDが違うから)エラーになると思うの
> ですが、どうでしょうか?
逆に言うと,マスタとセカンダリでpgpoolを経由しないでINSERTを直に行わな
い限り,ずれないはずです(random()やcurrent_timestampなどを使った問い合
わせを発行している関係で,INSERT件数がマスタとセカンダリで異なってくる
ケースを除く).
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内