Docker+CodeBuild运行Flyway报错flyway_schema_history表已存在如何解决
问题根因
Flyway 执行迁移任务前会自动创建flyway_schema_history元数据表来记录迁移进度,而你打包的V1迁移脚本V1__PSK_cdk_250821.sql的3811行手动写了创建同名表的DDL语句,两者执行顺序冲突导致报错。
排查步骤
- 打开
V1__PSK_cdk_250821.sql文件,定位到3811行,确认存在手动创建flyway_schema_history表的语句,绝大多数情况是导出初始库结构时,把Flyway生成的元数据表也一起导出到脚本里了 - 登录Flyway配置中连接的PostgreSQL数据库,执行
DROP TABLE IF EXISTS public.flyway_schema_history;,确认你手动删表的数据库和CodeBuild中Flyway连接的是同一个实例、同一个schema,避免环境配置错误导致删表不生效 - 查看CodeBuild的环境变量配置,确认Flyway的连接参数、schema配置没有写错,排除连错库的可能
解决方案
- 移除
V1__PSK_cdk_250821.sql中所有和flyway_schema_history表相关的DDL、DML语句,这个表由Flyway自身维护,禁止用户在迁移脚本中操作 - 如果是整库导出的初始脚本,后续导出时过滤掉
flyway_schema_history表,避免重复出现该问题 - 脚本修改完成后,再次手动删除数据库中残留的
flyway_schema_history表,重新触发CodeBuild执行Flyway迁移即可 - 测试环境可临时在Flyway启动参数中添加
-clean参数测试全量迁移流程,生产环境严禁使用该参数,会清空对应schema下的所有数据
内容的提问来源于stack exchange,提问作者Jiban7
相关产品推荐
相关产品推荐

