[groonga-dev,02683] Re: ベクターカラム適用DBをダンプファイルから正常に復元する方法

Back to archive index

Kimura A a.kim****@live*****
2014年 8月 24日 (日) 19:49:27 JST


木村です。村上さんご回答ありがとうございます。

> 記事とはFULLTEXT INDEXの作り方が異なっています。
> (ちなみにこのQiitaの記事は以前誤っており編集されております。)

ご示唆の通り、古いバージョン(Evernoteに保存した記事)を見て作業してました…。
しっかりメインテナンスされてるんですね。今後気をつけます。

> Qiitaの記事のインデックスの作成方法だと、bugsのFULLTEXT
> インデックスにより、Groonga的にはインデックスカラムは1_tagsの
> 方に作成されて、bugsテーブルのtagsカラムを対象にします。
> (たぶんわけがわからないと思います)

たしかにあまり理解できていないのですが、さしあたり
◯CREATE TABLE時の構文を現在の記事のものに手直しして、テーブルを生成し、
◯ダンプしたファイルからCONSTRAINT節を除去してインポート
することで、ベクターカラムによる検索が可能になりました。ありがとうございます。

なお、インポートの際に
/*!40000 ALTER TABLE `bugs` ENABLE KEYS */;
の行で以下のエラーが出ました。
ERROR 1005 (HY000) at line 63 in file: '〜.sql': [table][remove] a column that references the table exists: <bugs.tags> -> <1_tags>

日本語にすると「そのテーブルを参照するカラムが存在する」でしょうか。
意味ははっきりわかりませんが、これには村上さんご指摘の「ALTER TABLE bugs DISABLE KEYSで全文インデックス用のインデックスカラムが削除され」る、という挙動が関係しているのかな、と憶測しています。つまり、

1. DISABLE KEYSでbugsテーブルのインデックスカラムが削除された際に、外部テーブル1_tagsを参照するインデックスカラムだけが削除されずに残る。
2. ENABLE KEYSでbugsテーブルのインデックスカラムを復元する際に、削除されていないtagsインデックスカラムまで復元しようとしてしまい、このエラーが出る。

という感じなのかな…と。
正直なところ、僕はまだ「インデックスカラム」という用語自体よくわかっていないのですが、「検索用に自動生成される隠しカラム」みたいな理解で合っているでしょうか。
何にせよ、エラーは出ているものの、結果としてはベクターカラムによる検索は機能しているので、MySQLDumpからの復旧はこれでよしとしようか、と考えています。

> Qiitaの記事の方法のように、テーブル参照型のインデックスを
> 張ればいい思います。こうすれば、そのままダンプファイルを
> リストアすることができました。

こちらも実験してみました。

まずベクターカラムによる検索が機能しなくなったDBにおいて、既存の全文インデックスに「table "tags"」コメントを追加しようとすると、MySQLが落ちました。
そこで、いったん全文インデックスを削除して付け直してみました。その際のコマンドは以下の通りです。
ALTER TABLE `test2`.`bugs` ADD FULLTEXT `tags` (`tags`)COMMENT 'table "tags"';
が、わずか計7件のレコードに対するインデックスにも関わらず、20分経っても終わる気配がなく(汗)killして終了としました。

Windowsに限った話かもしれないのですが、Mroongaのテーブルに対してALTER TABLEでインデックスをいじろうとすると、何かしらのトラブルが発生して、結局テーブルを作り直さざるを得なくなるケースが多い気がしています…。
再現条件を特定できればいいんですが、今回はちょっと余裕がないので、テーブル削除→作り直しという方向で対策することにしました。
どうもありがとうございましたm(_ _)m

 		 	   		  



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