0Pricing
SQL Academy · 课时

工具: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 failure

Liquibase

基于 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 1

Sqitch

原生 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

三者比较

FlywayLiquibaseSqitch
格式SQLXML/YAML/JSONSQL
版本控制顺序顺序DAG
回滚有限原生原生
验证步骤无可选内置

框架原生工具

许多 Web 框架都有自己的工具:

  • Rails:ActiveRecord 迁移
  • Django:内置迁移
  • Node:knex、sequelize、prisma migrate
  • NestJS:TypeORM 迁移

CI 工作流

标准流程:

  1. PR 包含新的迁移文件
  2. CI 启动一个空的 Postgres,并运行所有迁移
  3. 针对迁移后的模式运行自动化测试
  4. 合并后,部署并针对预发布环境运行迁移,然后再针对生产环境运行

可重复迁移

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在线迁移:ALTER TABLE 为何会加锁
  2. 并发创建索引(CREATE INDEX CONCURRENTLY)
  3. 零停机重命名列
  4. 工具:Flyway、Liquibase、Sqitch
← 返回 SQL Academy