使用案例 · Supabase

让 Codex 安全编写并验证 Supabase 迁移

明确项目、环境和数据风险,在本地重放迁移,检查 RLS,再预览并部署到远端。

数据库迁移动手前,先确认正在处理哪个 Supabase 项目、哪个 Git 分支和哪个数据库环境。项目引用、组织、区域与远端链接都要核对。命令能执行不代表目标选对了。

先查版本和当前状态

Supabase 产品与 CLI 持续更新。让 Codex 先读官方 changelog,再运行本机 CLI 的 --version 和相关命令的 --help。随后用 supabase migration list 比较本地文件与远端历史,检查工作树里有没有未提交迁移。

新迁移通过 supabase migration new <name> 创建,再把 SQL 写进生成的时间戳文件。团队开始使用迁移以后,远端表编辑器和 SQL 编辑器不应继续承担随手改结构的工作,否则 Git 文件与 supabase_migrations.schema_migrations 会失去同步。

让 Codex 安全编写并验证 Supabase 迁移的入口、目标与准备条件操作示意图
图 1 · 进入任务前先确认目标、范围和准备条件

在本地重放完整链条

先审 SQL 的锁表时间、默认值、非空约束、索引、回填和删除操作。大量数据回填要与结构变更分开评估。使用本地 Supabase 环境运行 supabase db reset,它会重建本地数据库,按顺序应用所有迁移,再执行种子数据。这个结果能证明迁移链可以从空库重放。

public 等暴露 schema 中的表要启用 RLS,并写出符合真实访问模型的策略。只给 authenticated 角色权限还没有限制具体行。新增表是否自动出现在 Data API 也受项目设置和平台变更影响,迁移后要检查暴露设置、角色授权与 API 访问结果。

数据库类型会跟着 schema 变化。使用生成类型的项目应重新执行 supabase gen types,再跑应用测试、类型检查和涉及读写权限的集成测试。

让 Codex 安全编写并验证 Supabase 迁移的三步关键操作与请求骨架示意图
图 2 · 把关键操作拆成三步,并给每一步留下可观察结果

预览远端动作再部署

远端部署前运行 supabase db push --dry-run,阅读待应用迁移。确认链接仍指向预期环境,生产数据已有符合团队制度的备份与恢复安排,再由约定的发布者执行 supabase db push。多人同时推送会增加迁移历史冲突,官方团队流程建议一次只由一人部署。

不要在生产运行 supabase db reset --linked。这个命令会删除已链接远端数据库的 schema,并从本地迁移重建,只适合明确可丢弃的开发或测试环境。migration repair 只修改迁移历史记录,不会替你执行或回滚 SQL,使用前必须先确认真实 schema 状态。

让 Codex 安全编写并验证 Supabase 迁移的结果验收与交付证据清单示意图
图 3 · 用结果、检查与交付证据确认任务真的完成

大改动按兼容阶段发布

给线上表增加必填字段时,可以先添加允许空值的新列,让旧应用仍能读写。随后发布兼容新旧字段的应用,分批回填历史数据,并用查询核对空值数量。确认所有写入都带新字段以后,再增加非空约束。删除旧列留到后续迁移,等旧版本不再运行。

重命名、类型转换和大表索引也要先评估锁与执行时间。先在接近生产规模的测试环境查看执行计划与耗时,记录回滚办法和观察指标。迁移已经写入数据时,简单执行反向 SQL 可能造成丢失,回退计划要说明应用版本、schema 与数据怎样一起恢复。

部署后用普通用户和管理员路径分别查询,检查 RLS、触发器、函数与应用类型。Dashboard 里看见新列,只证明结构出现了,还没有证明客户端权限和业务读写正确。

交付时分别写明本地重放、预览环境验证、生产部署和线上查询验证。只完成迁移文件与本地测试,就标记为本地完成。

官方参考