[pgsql-jp: 36910] Re: pgpoolで\dエラー

Tatsuo Ishii ishii @ sraoss.co.jp
2006年 3月 22日 (水) 18:52:38 JST


石井です.

> 村田と申します。
> 
> Linuxサーバ2台でpgpoolを使用していますが、
> \dしようとするとエラーになる現象が出ています。
> pgpoolを使用する場合のdrop, createの手順に
> 問題があるのでは?と考えています。
> ご存知の方はご教授いただけないでしょうか。
> 
> ■現象
> pgpool経由でdropしたあとcreateしたテーブルに、
> \dしようとするとエラーが表示される。
> 
> taaweb=> \d test_tbl
> ERROR:  kind mismatch between backends
> HINT:  check data consistency between master and secondary
> server closed the connection unexpectedly
>         This probably means the server terminated abnormally
>         before or while processing the request.
> The connection to the server was lost. Attempting reset: Succeeded.
> 
> なおSELECTなどの発行は正常に実行されます。

OIDカウンタが,2つのデータベースが同じでない状態になっている可能性があ
ります(pgpoolは,レプリケーしょんスタート時に,OIDカウンタも含めて2つ
のデータベースクラスタが完全に一致していないと\dのような一部の問い合わ
せがエラーになります).

psql -E を使えば分かりますが,\d では,以下のような問い合わせが実行さ
れます.ご覧のように,\dはOIDをつかいまくりなので,OIDが一致していない
と,pgpoolから同じ問い合わせをマスターとセカンダリに発行しても結果が一
致せず,エラーになってしまいます.

試しにpsqlに-Eを付けた上でマスター側で直接\dを実行し,そこで実行された
問い合わせをセカンダリで実行して同じ結果になるかどうか試してみてはどう
でしょう?

test=# \d t1
********* QUERY **********
SELECT c.oid,
  n.nspname,
  c.relname
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^t1$'
      AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 2, 3;
**************************

********* QUERY **********
SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules, 
relhasoids , reltablespace 
FROM pg_catalog.pg_class WHERE oid = '16388'
**************************

********* QUERY **********
SELECT a.attname,
  pg_catalog.format_type(a.atttypid, a.atttypmod),
  (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
   FROM pg_catalog.pg_attrdef d
   WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef),
  a.attnotnull, a.attnum
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = '16388' AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
**************************

********* QUERY **********
SELECT c.relname FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '16388' ORDER BY inhseqno ASC
**************************

      Table "public.t1"
 Column |  Type   | Modifiers 
--------+---------+-----------
 i      | integer | 
--
Tatsuo Ishii
SRA OSS, Inc. Japan



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