Kouhei Sutou
kou****@clear*****
2017年 1月 5日 (木) 23:39:25 JST
須藤です。 In <20161****@orega*****> "[groonga-dev,04207] Re: PGROONGAでレコード追加時にエラー発生" on Tue, 13 Dec 2016 18:10:01 +0900, 高見 直輝 <takam****@orega*****> wrote: >> であれば、PGroongaもPostgreSQL起動時に壊れているかチェックし >> て壊れていたら壊れているやつを削除するのがいい気がしました。 >> shared_preload_librariesにpgroonga.dllを指定する必要がありま >> すが、実現できそうな気がします。 > > 可能でしたら、ぜひお願いします。 できるかどうか実装してみました。 結果、できることが確認できました。PGroongaのWALを有効にして おくと起動後のINSERTまたはSELECT時に自動でインデックスを再構 築することも確認できました。 後は以下を整備すれば実用になりそうな感じです。 * ログ出力 * 壊れているかのチェックのパターンを増やす >> 削除しておくと実際にINSERTしたりSELECTしたときにエラーになる >> のでそれでどこが壊れているかわかると思います。 > > ここで分かるのはGROONGAのテーブル名(SourcesXXXX)だと思うのですが、GROONGAのREINDEXコマンド > (pgroonga.command関数経由)などで復旧できるのでしょうか? Groongaのインデックスが壊れているだけなら復旧できますが、テー ブルやデータが入ったカラムが入っているときは復旧できません。 元データがなくなっているからです。PostgreSQLのREINDEXを実行 する必要があります。 > もしPostgreの方のインデックスを再構築する必要があるなら、インデックス名を取得する関数(pgroonga.table_name > 関数の逆)も用意してもらえると助かります。 > テーブルが大量にある環境だと、全部リストアップして探し出すコストが大きいので。 エラーメッセージにPostgreSQLのインデックス名も含まれるように する方がよさそうだなぁと思っています。 > 1.1.9&PostgreSQL9.4.5で試してみたところ、[groonga-dev,03949]のときと同様のエラーが発生しました。 > このときはVisual Studio 2015を使用することで回避できたので、現状も同様と思われます。 うーん、これ、どうしてでしょうねぇ。 手元でもAppVeyorというCIサービス上でも再現しないんですよねぇ。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ OSS開発支援サービス: http://www.clear-code.com/blog/2016/6/27.html