[pgsql-jp: 37536] Re: pool_check_fdで縮退運転

maeda @ motion.ne.jp maeda @ motion.ne.jp
2006年 9月 12日 (火) 17:39:09 JST


前田です。

On Tue, 12 Sep 2006 15:58:21 +0900 (JST)
Yoshiyuki Asaba <y-asaba @ sraoss.co.jp> wrote:

> pid 3708 の ERROR のもうすこし上のログがあると、詳細がわかる可能性があ
> ります。あと、バッチプログラムはどのように pgpool に接続していますでしょ
> うか(JDBC を使っている等)?

デバッグオプションをつけていなかったので
pid 3708のこれより前のログは吐かれていませんでした。
デバッグオプションをつけて再起動しましたが、
それ以降まだエラーが発生しておりません。

2006-09-12 05:36:57 LOG:   pid 18371: starting health checking
2006-09-12 05:37:58 LOG:   pid 18371: starting health checking
2006-09-12 05:38:58 LOG:   pid 18371: starting health checking
2006-09-12 05:39:58 LOG:   pid 18371: starting health checking
2006-09-12 05:40:58 LOG:   pid 18371: starting health checking
2006-09-12 05:41:58 LOG:   pid 18371: starting health checking
2006-09-12 05:42:58 LOG:   pid 18371: starting health checking
2006-09-12 05:43:34 ERROR: pid 3708: pool_check_fd: data is not ready tp->tv_sec 5 tp->tp_usec 5000000
2006-09-12 05:43:34 ERROR: pid 3708: pool_process_query: secondary data is not ready at synchronous point. abort this session
2006-09-12 05:43:34 ERROR: pid 3708: pool_process_query: kind does not match between backends master(C) secondary(^@)
2006-09-12 05:43:34 LOG:   pid 3708: notice_backend_error: master: 1 fail over request from pid 3708

バッチはPHPで書かれており、
pearのDBクラスを使用しています。

大まかな処理は以下のとおりです。

1)pearのDB::connectを呼び出して、postgresに接続する。
	$db =& DB::connect($dsn);
2)query("begin;")して、トランザクションを開始する。
	$db->query("begin;");
3)copyしたい内容を1024件づつ、pg_copy_fromに渡してcopyする。
	pg_copy_from($db->connection,"テーブル名", array(インサートする内容));
4)query("commit;")して、トランザクションを反映する。
	$db->query("commit;");

エラーは3)で発生するのですが、必ず発生するわけではありません。

Warning: pg_copy_from(): endcopy failed: ERROR:  kind mismatch between backends

よろしくお願いいたします。



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