Qoder 项目初始化模板:快速搭建 React Vue 与 Go 的标准环境
2026-06-05
2026-06-11 0
必须统一Liquibase与Flyway的变更历史起点:先核查databasechangelog或flyway_schema_history表状态,再通过生成基准快照、手工编写或跨工具同步确保初始一致;增量脚本需双标记头、语法兼容并严格校验。

将GitHub Copilot相关元数据从旧数据库迁移到新环境时,必须确保Liquibase与Flyway能协同识别同一套变更历史,避免重复执行或跳过关键迁移。
连接目标数据库,运行 SELECT * FROM databasechangelog;(Liquibase)或 SELECT * FROM flyway_schema_history;(Flyway),核对表是否存在、是否为空、最新记录的ID/installed_rank是否连续。
若两表均不存在,说明尚未初始化,可直接进入脚本编写;若其中一张表存在但另一张为空,【绝不能手动清空已有表】,否则会导致版本偏移不可逆。
方法一:用Liquibase生成基准脚本
执行 liquibase generate-changelog --outputFile=init.xml --diffTypes=tables,columns,生成包含全部现有表结构的XML快照。
方法二:用Flyway创建V1__init.sql
在 src/main/resources/db/migration/ 下新建文件,手工写出CREATE TABLE语句,字段类型需严格匹配当前数据库实际DDL(例如PostgreSQL中用TEXT而非VARCHAR(255)),否则后续diff会误判为变更。
方法三:跨工具同步元数据
将Liquibase生成的init.xml中每个-- flyway:sql注释行,否则Flyway会跳过解析。
第一步:为Liquibase准备changeset
在changelog-master.xml中新增:
第二步:为Flyway生成对应SQL
运行 liquibase --changeLogFile=changelog-master.xml generate-sql --outputFile=V3__add_copilot_session_table.sql,得到标准SQL文件。
第三步:校验并修正SQL兼容性
打开生成的SQL,检查是否有Liquibase特有语法(如ADD COLUMN IF NOT EXISTS),Flyway不支持该语法,必须删掉IF NOT EXISTS并确保该列在目标库中确实不存在;否则执行失败且无回滚机制。
第四步:注入双标记头
在V3__add_copilot_session_table.sql顶部添加两行:-- liquibase formatted sql-- flyway:sql
这两行顺序不可颠倒,Liquibase只认第一行,Flyway只认第二行。