配置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的场景,无需修改脚本内容,仅通过配置切换目标:- 在flyway.conf中添加占位符配置:
flyway.placeholders.targetSchema=${flyway.defaultSchema} - 修改迁移脚本,通过占位符绑定Schema:
CREATE TABLE ${targetSchema}.foo ( fooid smallint NOT NULL ); - 切换目标Schema时,仅需修改
flyway.defaultSchema或flyway.schemas参数,脚本无需改动。
- 在flyway.conf中添加占位符配置:
配置会话搜索路径(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
相关产品推荐
相关产品推荐

