Flywayで「Unsupported Database: PostgreSQL 17.0」が発生する場合の解決策
問題概要
PostgreSQL 17.0環境でFlywayを使用する際、以下のようなエラーが発生します:
Unsupported Database: PostgreSQL 17.0
この問題が発生する典型的な状況:
- Flyway最新バージョン(10.20.1)を使用している
- PostgreSQLを16から17へアップグレードした
flyway-core
依存関係のみを定義している- 依存関係の変更やデータベースバージョン調整でも解決しない
根本的な原因: FlywayはPostgreSQL用の追加ライブラリ(flyway-database-postgresql
)が必要ですが、これがプロジェクトに含まれていない場合、最新のPostgreSQLバージョンを認識できません。
効果的な解決方法
1. PostgreSQL専用ライブラリの追加 (推奨)
PostgreSQLサポートを有効にするには、flyway-database-postgresql
依存関係を追加します。
Mavenの場合 (pom.xml
):
xml
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-database-postgresql</artifactId>
<version>10.20.1</version>
</dependency>
Gradleの場合 (build.gradle
):
groovy
dependencies {
implementation("org.flywaydb:flyway-database-postgresql:10.20.1")
}
重要
flyway-core
とflyway-database-postgresql
のバージョンは一致させる必要があります。混合バージョン使用は予期せぬ動作を引き起こします。
2. JDBCドライバーの更新
PostgreSQLの最新ドライバーを使用してください:
xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.2</version>
</dependency>
3. 設定ファイルの最適化 (application.yml
)
基本設定を追加してマイグレーション動作を明示します:
yaml
flyway:
enabled: true
baseline-on-migrate: true # 既存データベースを管理対象に含める
baseline-version: 1 # 初期バージョン設定
# locations: classpath:db/migration # マイグレーションスクリプトのパス
4. (代替案) PostgreSQLバージョンのダウングレード
すぐに解決できない場合の一時的対策:
bash
# PostgreSQL 16系の最新安定版をインストール
sudo apt install postgresql-16
注意
これはあくまで一時的な回避策です。長期運用では公式サポートバージョンを使用してください。
動作確認手順
- 依存関係を追加・更新後プロジェクトをクリーンビルド
- データベース接続設定を確認
- Flywayの初期化コマンドを実行:bash
./mvnw flyway:info # Maven ./gradlew flywayInfo # Gradle
- 正常に接続できることを確認
補足情報
- FlywayのPostgreSQL 17サポート状況: Flyway 10.20.1はPostgreSQL 17を公式サポートしていませんが、適切なドライバーと設定で動作可能です
- 将来のアップデート: Flywayチームは新データベースバージョンのサポートを迅速に追加します。公式リリースノートで最新情報を確認してください
- 設定の検証:
flyway validate
コマンドで設定の正当性をチェック可能です
古い解決策に注意
過去の回答には「flyway-core
を削除」と提案するものがありますが、両方必要です:
diff
dependencies {
- // implementation("org.flywaydb:flyway-core")
+ implementation("org.flywaydb:flyway-core")
implementation("org.flywaydb:flyway-database-postgresql")
}
予防策
- 依存関係管理ツール(Maven BOM/Gradle Platform)を使用
- 新しいデータベースバージョン採用時は必ずFlywayサポートマトリックスを確認
- CIパイプラインでマイグレーションスクリプトの検証を実施
これらの対策を実装することで、FlywayがPostgreSQL 17.0を正しく認識し、スムーズなデータベースマイグレーションが実現できます。