[groonga-dev,03557] Re: Mroonga で data truncated for primary key column: <id> が発生する

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 10月 7日 (水) 23:56:18 JST


須藤です。

In <20151****@domai*****>
  "[groonga-dev,03556] Re: Mroonga で data truncated for primary key column: <id> が発生する" on Wed, 07 Oct 2015 20:04:33 +0900,
  各務 洋 <kagam****@outwa*****> wrote:

>> このテーブルは一度問題が発生したテーブルをそのまま使ったもの
>> ですか?それとも作りなおしたものですか?
> 
> テスト毎にDBそのものを新しく作っていっています。

ありがとうございます。
おかげで(これと関係しそうな)問題を見つけられました。

森さん、Int64がキーなTABLE_PAT_KEYで壊れたデータになってしま
うケースの再現スクリプトを作ったので見てもらえないでしょうか?
(Int64なのは関係なさそうな気はしますが。。。)

  https://github.com/groonga/groonga/issues/415

table_create pat TABLE_PAT_KEY Int64

load --table pat
[
{"_key": 0},
{"_key": 1}
]

delete pat --key 1

load --table pat
[
{"_key": 3}
]

select pat
# -> [[0,1444229153.27227,0.00015711784362793],
#     [[[2],[["_id","UInt32"],["_key","Int64"]],[1,0],[1,0]]]]

この最後のselectで_id,_keyが1,0のレコードが2つでています。
garbageがあるときのaddかツリーをトラバースしている処理がおか
しいのかもしれません。

> そこで1点、ふと疑問に思ったのですが、Index を修復する際に、既に Unique 
> 違反になっているレコードはどのようにするお考えでしょうか?

Mroongaにユニークチェック中にクラッシュチェックが入ったら、
この状態になることはなくなるはずなので、考えない、が答えにな
ります。

> というのも、ALTER TABLE にかける際にも、AUTO_INCREMENT 外して、Primary Key
> と Unique Key 外して重複分を探して削除して元に戻す必要があったので……。
> (ALTER TABLE に失敗して Duplicate と出たら↑をやるようにしてみました)
> 
> 私は主キーが使えないのはツラいを言い訳に、ガッと削除にしました。

重複しているものはどれかを削除するしかないです。。。


-- 
須藤 功平 <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/




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