Skip to content

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-coreflyway-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

注意

これはあくまで一時的な回避策です。長期運用では公式サポートバージョンを使用してください。

動作確認手順

  1. 依存関係を追加・更新後プロジェクトをクリーンビルド
  2. データベース接続設定を確認
  3. Flywayの初期化コマンドを実行:
    bash
    ./mvnw flyway:info  # Maven
    ./gradlew flywayInfo # Gradle
  4. 正常に接続できることを確認

補足情報

  • 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")
}

予防策

  1. 依存関係管理ツール(Maven BOM/Gradle Platform)を使用
  2. 新しいデータベースバージョン採用時は必ずFlywayサポートマトリックスを確認
  3. CIパイプラインでマイグレーションスクリプトの検証を実施

これらの対策を実装することで、FlywayがPostgreSQL 17.0を正しく認識し、スムーズなデータベースマイグレーションが実現できます。