LoginSignup
0
1

More than 5 years have passed since last update.

H2 と MySQL で DDL を共有する

Posted at

ScalikeJDBC を使ったプロジェクトで、本番のデータベースは MySQL だけど、テストは手軽さを優先して H2 を選択して開発を進めています。

データベースのマイグレーションを Flyway で行っており、DDL は MySQL / H2 共有で使っていて、ほとんどのケースで問題なく動いていたのですが、一部 SQL ステートメントエラーになるケースがあったのでメモ。

経緯

マイグレーションファイルを作成していて、テーブルのユニーク制約を削除したかったので以下のような DDL を作成した。

ALTER TABLE articles DROP INDEX articles_title;

MySQL だと動くんですが、H2 では インデックス "ARTICLES_TITLE" が見つかりません というエラーになります。

H2 の設定で MODE=MySQL としてもだめでした。
(そもそも構文に互換性を持たせるためのものではなかった。)

原因

どうも 1.4.196 までは ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name> とする必要があったようです。
Issue #570

調べてみると 1.4.197 では上記 Issue が取り込まれ DROP INDEX でもユニーク制約が削除できるようになっていました🙏

めでたしめでたし。

参考

MySQL と H2 の両方で動作するデータ定義言語 (DDL) のパターン集

0
1
0

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
0
1