You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Flyway Schema迁移PostgreSQL数据库时遇到报错

Flyway通用迁移多Schema运行报错解决

我在配置Flyway通用迁移时遇到问题,该迁移计划在多个不同Schema中运行。

迁移脚本:

CREATE TABLE foo (
    fooid smallint NOT NULL
);

flyway.conf配置:

flyway.url=jdbc:postgresql://localhost:5432/test
flyway.user=
flyway.locations=filesystem:../../generic, filesystem:../migrations
flyway.cleanDisabled=False
flyway.defaultSchema=testschema
flyway.schemas=testschema

运行时出现错误:错误:未选择要在其中创建对象的模式


解决方案

  • 用Flyway占位符动态指定Schema
    适合通用脚本适配多个Schema的场景,无需修改脚本内容,仅通过配置切换目标:

    1. 在flyway.conf中添加占位符配置:
      flyway.placeholders.targetSchema=${flyway.defaultSchema}
      
    2. 修改迁移脚本,通过占位符绑定Schema:
      CREATE TABLE ${targetSchema}.foo (
          fooid smallint NOT NULL
      );
      
    3. 切换目标Schema时,仅需修改flyway.defaultSchema或flyway.schemas参数,脚本无需改动。
  • 配置会话搜索路径(search_path)
    在迁移脚本开头指定会话的search_path,让PostgreSQL默认在目标Schema中创建对象:

    SET search_path TO ${flyway.defaultSchema};
    CREATE TABLE foo (
        fooid smallint NOT NULL
    );
    

    这种方式同样能保持脚本通用性,通过配置的defaultSchema动态切换目标。

  • 多Schema批量运行配置
    如果需要一次在多个Schema中执行迁移,可在flyway.conf中设置多个Schema:

    flyway.schemas=schema1,schema2,schema3
    

    配合上述占位符或search_path的方式,Flyway会自动对每个指定的Schema执行迁移脚本。

内容的提问来源于stack exchange,提问作者user2183985

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:04