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