Kouhei Sutou
kou****@clear*****
2016年 1月 31日 (日) 16:09:54 JST
須藤です。 In <20160****@orega*****> "[groonga-dev,03880] Re: PGRNファイルが開けない?" on Fri, 29 Jan 2016 10:40:29 +0900, 高見 直輝 <takam****@orega*****> wrote: >> Sourcesのあとの「37356」がインデックスのID(PostgreSQLの中で >> はOIDと呼ばれているもの)なんですが、PGroongaはVACUUMのとき >> に「37356」が有効かどうかをチェックして無効ならその >> SourcesXXXと関連する(Groongaの)テーブル・カラムを削除して >> います。 >> >> 有効かどうかのチェック方法は、たぶん、SQLでいうと >> >> SELECT * FROM pg_class WHERE oid = 37356; >> >> に相当します。問題のデータベースで↑の結果がどうなるか教えて >> もらえませんか? >> >> >> レコードが存在しないなら想定外なんですが、たぶん、存在するん >> ですよ。とすると、なんで無効扱いになっているかなんですけど、 >> なんでだろう。デバッガーで追えればすぐにわかりそうですが。。。 > > 残念ながら、レコードが存在しませんでした。 え、あ、そうなんですか。 > 1.0.0にデバッグログ出力を追加したモジュールなどを作成してもらえれば、差 > し替えて調査することは可能です。 > よろしければ御検討下さい。 これはPGroongaレベルでどうこうの話ではなく、PostgreSQLレベル でどうこうの話なんです。(PostgreSQLがインデックスをどうやっ て管理しているか。) インデックスは存在しているがpg_classには該当インデックスの OIDが存在しない、という状況がどういうときに発生するかがわか ればいいんですが、どのようなSQLを実行しているかがわからない とこちらで再現できないので調べられないんです。 なにか操作するたびにpg_classをチェックして、どんな操作をすれ ば「インデックスは存在しているがpg_classには該当インデックス のOIDが存在しない」という状況になるか絞り込んでもらうことは できますか? たぶん、REINDEXしたときはpg_classに存在していると思うんです よ。PGroongaにそのOIDのインデックスを作ってくれ、という指示 が飛んでいるので。なので、それ以降のそうさのどこかでpg_class から消えるんだと思うんです。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ リーダブルコードワークショップ: http://www.clear-code.com/services/code-reader/readable-code-workshop.html