工具:Flyway、Liquibase、Sqitch
比较常用的模式迁移工具、它们的版本管理模型以及 CI 集成方式
工具:Flyway、Liquibase、Sqitch 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
为什么需要迁移工具?
模式变更需要做到:
- 在源代码管理中进行版本控制
- 按确定的顺序应用
- 在 CI/CD 中自动运行
- 支持回滚(有时需要)
Flyway
基于 Java、以文件为基础的迁移工具。每个文件都以版本前缀命名:
-- V1__create_users.sql
CREATE TABLE users (id BIGSERIAL PRIMARY KEY, email TEXT NOT NULL);
-- V2__add_full_name.sql
ALTER TABLE users ADD COLUMN full_name TEXT;
-- Flyway tracks applied migrations in a flyway_schema_history table.Flyway CLI
应用迁移:
flyway -url=jdbc:postgresql://localhost/mydb -user=app migrate
flyway info # show what would run
flyway repair # fix the history table after a failureLiquibase
基于 XML/YAML/JSON(或 SQL)的“变更集”。比 Flyway 更冗长,但支持跨数据库抽象:
<!-- changeset alice:001 -->
<createTable tableName="users">
<column name="id" type="bigserial" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="email" type="text"><constraints nullable="false"/></column>
</createTable>Liquibase 回滚支持
每个变更集都可以声明回滚操作。Liquibase 可以回滚最后 N 个变更:
liquibase rollbackCount 1Sqitch
原生 SQL,不使用版本号排序 — 而是使用显式的依赖 DAG。每项变更都有部署、验证和还原脚本:
sqitch add add_users -n 'Add users table'
# edits deploy/add_users.sql, verify/add_users.sql, revert/add_users.sql
sqitch deploy db:pg://localhost/mydb三者比较
| Flyway | Liquibase | Sqitch | |
|---|---|---|---|
| 格式 | SQL | XML/YAML/JSON | SQL |
| 版本控制 | 顺序 | 顺序 | DAG |
| 回滚 | 有限 | 原生 | 原生 |
| 验证步骤 | 无 | 可选 | 内置 |
框架原生工具
许多 Web 框架都有自己的工具:
- Rails:ActiveRecord 迁移
- Django:内置迁移
- Node:knex、sequelize、prisma migrate
- NestJS:TypeORM 迁移
CI 工作流
标准流程:
- PR 包含新的迁移文件
- CI 启动一个空的 Postgres,并运行所有迁移
- 针对迁移后的模式运行自动化测试
- 合并后,部署并针对预发布环境运行迁移,然后再针对生产环境运行
可重复迁移
Flyway 支持“R__”可重复迁移 — 每次发生变更时都会重新运行。适用于视图和存储过程:
-- R__users_view.sql (re-applied whenever its checksum changes)
CREATE OR REPLACE VIEW active_users AS
SELECT id, email FROM users WHERE deleted_at IS NULL;模式偏移检测
使用 migra、schemahero 或 pgquarrel 检测预期模式与实际模式之间的偏移。
回顾
选择一个工具并坚持使用。
- Flyway — 以 SQL 为先,简单
- Liquibase — 声明式,提供抽象层
- Sqitch — DAG 依赖,以回滚为先
- 始终做到:在源代码管理中进行版本控制,在 CI 中自动化
快速检查
哪个工具原生使用迁移之间显式的依赖 DAG,而不是顺序版本号?
常见问题解答
「工具:Flyway、Liquibase、Sqitch」课时是免费的吗?
是的 — 「工具:Flyway、Liquibase、Sqitch」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「工具:Flyway、Liquibase、Sqitch」这节课中我会学到什么?
比较常用的模式迁移工具、它们的版本管理模型以及 CI 集成方式 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「工具:Flyway、Liquibase、Sqitch」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 在线迁移:ALTER TABLE 为何会加锁
- 并发创建索引(CREATE INDEX CONCURRENTLY)
- 零停机重命名列
- 工具:Flyway、Liquibase、Sqitch