1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TiDBをbackendにしたGrafanaをv9.3より前からv9.3以降に更新するときにDB migrationでエラーする

Posted at

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の場合似たようなことをやっている。ちゃんとデータコピーしてるけど。

感想

これでとくに問題が起きないといいね。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?