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の場合似たようなことをやっている。ちゃんとデータコピーしてるけど。
感想
これでとくに問題が起きないといいね。