0Pricing
SQL Academy · 课时

模式变更的 CI(GitHub Actions)

在每个 PR 中通过 GitHub Actions 运行迁移、dbt build 和 SQLFluff 检查,并使用临时数据库

模式变更的 CI(GitHub Actions) 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

为什么要为 SQL 使用 CI

手动迁移会导致服务中断。CI 可以发现:

  • 无法应用的迁移
  • 会破坏现有测试的迁移
  • 环境之间的架构漂移
  • 代码检查和测试回归

稳健的 SQL CI 流水线

  1. 启动临时 Postgres(Docker / GitHub Actions 服务)
  2. 从头应用所有迁移
  3. 仅将新增迁移应用到暂存环境架构的副本
  4. 运行 dbt build / Flyway test / 应用测试
  5. 执行 SQLFluff 代码检查
  6. 生成架构差异报告

GitHub Actions:Postgres 服务

伴随作业启动 Postgres:

name: ci
on: [pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      pg:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: postgres
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - name: Run migrations
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres
        run: |
          ./scripts/migrate.sh

代码检查步骤

将 SQLFluff 代码检查作为单独的作业:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
      - run: pip install sqlfluff && sqlfluff lint models/

CI 中的 dbt 构建

对于 dbt 项目:

- name: dbt deps & build
  run: |
    pip install dbt-postgres
    dbt deps
    dbt build --profiles-dir profiles/ci

架构差异

migra(或 apgdiff、schemahero)会显示迁移引入的更改:

pip install migra
migra postgres://baseline postgres://branch > diff.sql
# Comment diff.sql on the PR

仅向前策略

始终创建新的迁移;不要编辑已经应用的迁移。CI 会确保迁移序列能够从头应用。

向后兼容的架构更改

每个 PR 的架构都应与之前的应用版本保持兼容,这样您可以按任意顺序部署应用和数据库。CI 可以通过针对 NEW 架构运行 OLD 应用测试来验证这一点。

测试数据种子

CI 中的小型测试数据装载脚本可以让测试基于逼真的数据运行:

- name: Seed
  run: psql $DATABASE_URL < seed/dev.sql

迁移测试中的锁超时

在 CI 迁移中设置锁超时,以模拟生产环境行为:

ALTER DATABASE postgres SET lock_timeout = '5s';

应用到生产环境

对于生产环境迁移,请使用一次性作业:

  • 带重试机制的迁移运行器
  • 失败时发送通知
  • 记录完善的回滚流程

数据库分支模式

Neon、Supabase 等工具的分支功能可以为每个 PR 创建生产环境副本——针对真实数据副本运行迁移和应用测试。

回顾

SQL 应纳入 CI。

  • 启动临时 PG 服务
  • 应用迁移并执行 dbt build
  • 使用 SQLFluff 进行代码检查
  • 针对已迁移的架构运行应用测试
  • 生成架构差异供审查

快速检查

向 GitHub Actions 作业添加 Postgres 数据库最简单的方法是什么?

常见问题解答

「模式变更的 CI(GitHub Actions)」课时是免费的吗?

是的 — 「模式变更的 CI(GitHub Actions)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「模式变更的 CI(GitHub Actions)」这节课中我会学到什么?

在每个 PR 中通过 GitHub Actions 运行迁移、dbt build 和 SQLFluff 检查,并使用临时数据库 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「模式变更的 CI(GitHub Actions)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. DBT(数据构建工具)基础
  2. SQLFluff 与代码检查
  3. 测试 SQL:dbt 测试与 Great Expectations
  4. 模式变更的 CI(GitHub Actions)
← 返回 SQL Academy