Migration ID add primary key to seed_assigmentが以下のエラーで失敗する。
Error 8200: unsupported add column 'id' constraint AUTO_INCREMENT when altering 'grafana.seed_assignment'
原因
たぶん発行されるSQL statementは以下。
ALTER TABLE seed_assignment ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)
TiDB Restriction
Currently, AUTO_INCREMENT has the following restrictions when used in TiDB:
- ALTER TABLE cannot be used to add the AUTO_INCREMENT attribute.
TiDBはAUTO_INCREMENTを追加するALTER TABLEを現在許していない。
対処
seed_assignmentがなにをするテーブルなのかはよく分かっていないけど、幸いにも空だったので、テーブルを削除して新スキーマで再生成する。
mysqldump --no-dataでschemaのdumpを取った後、idを加えたCREATE TABLE文を用意し、DROP TABLEをした後に用意したCREATE TABLEを発行する。
そのままだとGrafanaはmigrationが行われたことに気づかずエラーを繰り返すので、table migration_logの適当なエラー行のsuccess列を1にしてしまってつじつまを合わせる。
SELECT id, migration_id, success FROM migration_log WHERE migration_id = 'add primary key to seed_assigment' LIMIT 1;
UPDATE `migration_log` SET `success` = '1' WHERE `migration_log`.`id` = ${{SELECTで得たID}};
GrafanaのseedAssignmentPrimaryKeyMigratorのコードを読むと、SQLiteの場合似たようなことをやっている。ちゃんとデータコピーしてるけど。
感想
これでとくに問題が起きないといいね。