[pgsql-jp: 36594] ERROR: catalog is missing 3 attribute(s)

Katsunori SUZUKI suzuki.ktn @ ncos.nec.co.jp
2005年 12月 27日 (火) 18:03:29 JST


こんにちは、鈴木と申します。

Red Hat Enterprise Linux AS3 で、postgresql-8.0.3 を使っています。

原因はわからないのですが、DB 中の特定のテーブルを
truncate できなくなってしまいました。

発生するエラーメッセージは以下のようなものです:

    testdb=# TRUNCATE table1 ;
    ERROR:  catalog is missing 3 attribute(s) for relid 18110

このテーブルに対して、select や insert を行うことはできます。


Google で "catalog-is-missing" を調べてみた範囲では、
システムカタログが壊れているから initdb した方がいい、
というようなアドバイスを見かけましたが、
それしか復旧方法はないのでしょうか?

問題が発生した DB は試験用なので initdb しても構わないのですが、
このような問題が発生する原因としてはどのようなものが
考えられるでしょうか?
(異常処理の一部として全プロセスを kill -KILL するケースが
  あるので関係するかも、とは思っていますが、はっきりしません)

何かご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。


今のところ、自力で調べた範囲では、以下のことが分かっています。

エラーメッセージの文字列を relcache.c で見つけたので
ざっと見たところ、pg_attribute カタログに関係があるようでした。
そこで、以下の結果を使って正常なテーブルと比較してみました:

  select * from pg_attribute
    where attrelid =
      ( select oid from pg_class where relname = 'table1' );

その結果、下記のフィールドが欠けていることが分かりました:

    tableoid cmax xmax cmin xmin oid ctid

何か重大な壊れ方をしているように思われますが、
原因などは分かりませんでした。

以上、よろしくお願い致します。




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