[groonga-dev,04231] Re: PGROONGAでレコード追加時にエラー発生

Back to archive index

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




groonga-dev メーリングリストの案内
Back to archive index