こんにちは。 Mroonga 9.05をリリースしました! リリースアナウンス: http://mroonga.org/ja/blog/2019/07/30/mroonga-9.05.html 変更点: http://mroonga.org/ja/docs/news.html#release-9.05 さて、今回の主な変更点は次のとおりです。 * MySQL 5.6.45と5.7.27とMySQL 8.0.17対応パッケージの更新 * ユニークインデックスを更新する際の不具合を修正 ユニークインデックスを更新する際の不具合を修正しているので、すでにユニークインデックスを作っている人は テーブルを作り直す必要があります。 既存のユニークインデックスにゴミが残っているかもしれないからです。詳細は後述します。 ### MySQL 5.6.45と5.7.27とMySQL 8.0.17対応パッケージの更新 今回のリリースでは、MySQLの各バージョンのアップデートに追従するパッケージをリリースしました。 MySQL 8.0向けのパッケージでサポートしていなかった TIMESTAMP 型にも対応しています。 実験的なので、もし不具合や疑わしい挙動をみつけたらメーリングリストでもよいですし、 GitHubのissueでもよいので報告してくれると助かります。 見つけたバグを報告するには以下を参考にしてください。 * http://mroonga.org/ja/docs/contribution/report.html ### [ストレージモード] ユニークインデックスを更新する際の不具合を修正 今回のリリースでは、ユニークインデックスを更新する際の不具合を修正しました。 以下の条件を満たすと INSERT 時にキーの重複エラーが発生していました。 * ユニークインデックスをマルチカラムに対して作成する * ユニークキーのカラムの一部が更新される 例えば、次のようなサンプルでエラーが再現します。 MySQL [test]> CREATE TABLE fts_targets ( -> id int(11) NOT NULL AUTO_INCREMENT, -> source_id int(11) NOT NULL, -> source_type_id int(11) NOT NULL, -> PRIMARY KEY (id), -> -- Multiple column unique index -> UNIQUE KEY (source_id, source_type_id) -> ) DEFAULT CHARSET=utf8mb4 ENGINE=Mroonga; Query OK, 0 rows affected (0.027 sec) MySQL [test]> INSERT INTO fts_targets (source_id, source_type_id) VALUES (10, 100); Query OK, 1 row affected (0.006 sec) MySQL [test]> UPDATE fts_targets SET source_id = 11 WHERE id = 1; Query OK, 1 row affected (0.001 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL [test]> INSERT INTO fts_targets (source_id, source_type_id) VALUES (10, 100); ERROR 1062 (23000): Duplicate entry '10-100' for key 'source_id' 上記のようなケースで、古いインデックスのエントリが削除されず、キーの重複が発生してしまっていました。 冒頭でも述べましたが、すでにユニークインデックスを作っている人はテーブルを作り直す必要があります。 テーブルを作り直すには、ダンプ・リストアするか、以下の手順を実行してください。 ALTER TABLE (ユニークインデックスを作ったテーブル) DISABLE KEYS; ALTER TABLE (ユニークインデックスを作ったテーブル) FORCE; ALTER TABLE (ユニークインデックスを作ったテーブル) ENABLE KEYS; -- Kentaro Hayashi <hayas****@clear*****>