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

Ken Murata - sonicjam Inc. ken @ sonicjam.co.jp
2006年 3月 22日 (水) 19:47:42 JST


村田です。

ご指摘のとおり、
OIDカウンタが,2つのデータベースが同じでないのが原因のようです。

この場合、
(1) 強制的にOIDを変更できるのでしょうか?
(2) こうならないためにはcreate tableはどのように実行すればよいでしょうか?
(3) \dではエラーになりますが、実際のレプリケーション動作上は
    問題ないのでしょうか?

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

OIDの確認 ----------

■実行したSQL
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 pg_catalog.pg_table_is_visible(c.oid)
     AND c.relname='test_tbl'
     AND n.nspname='public'
ORDER BY c.oid;

■マスタ結果
   oid   | nspname | relname
---------+---------+----------
 1866202 | public  | test_tbl

■セカンダリ結果
   oid   | nspname | relname
---------+---------+----------
 1866200 | public  | test_tbl


On Wed, 22 Mar 2006 18:52:38 +0900 (JST)
Tatsuo Ishii <ishii @ sraoss.co.jp> wrote:

> 石井です.
> 
> > 村田と申します。
> > 
> > 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

 + sonicjam Inc.
 | 
 | Ken Murata
 | 
 | E-mail: ken @ sonicjam.co.jp
 | URL: http://www.sonicjam.co.jp/
 | TEL/FAX: 03-5774-7461/03-5774-7462
 + 





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