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