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