内容提要
Supabase 创建分支时并行复制主项目设置、迁移和边缘函数,约20秒就绪。连接 GitHub 的分支从仓库读取配置和迁移,无 Git 分支则从主项目获取。迁移按文件事务执行,失败回滚;函数仅上传变更部分。失败步骤会阻止后续依赖步骤,可在仪表板查看日志排查。
延伸解读
分支输入源:Git 连接与无 Git 的差异
分支的配置、迁移和函数来源取决于是否关联 Git 分支。GitHub 连接的分支从仓库读取 config.toml、迁移文件、种子文件和函数;无 Git 分支则从主项目获取 schema 和函数。这意味着 Git 连接分支的变更完全由代码仓库驱动,适合与 PR 流程集成;无 Git 分支更适合快速测试,但无法通过仓库管理配置。
配置复制与仓库覆盖的优先级
创建分支时,主项目的 Postgres、连接池、Auth、Data API、Realtime、Storage 等设置会被复制到分支,但 Auth 密钥不会。对于 GitHub 连接的分支,仓库中的 config.toml 会覆盖复制的设置,且系统会等待复制完成后再应用仓库配置,避免竞争。若仓库没有 config.toml,则仅启用 Database Webhooks。这确保了仓库作为配置的最终来源。
迁移执行:事务性保证与失败处理
迁移文件按语句拆分,每个文件在一个事务中执行,要么全部成功并记录历史,要么回滚不留痕迹。失败时会显示具体语句和位置。无 Git 分支从主项目的迁移历史表读取迁移,若主项目无历史,则转储 schema 作为首个迁移。GitHub 连接分支则直接使用仓库中的迁移文件。迁移失败会阻止后续的种子和函数部署步骤。
函数部署:增量上传与校验机制
分支创建时,主项目的所有活跃函数会被复制到分支,与配置过程并行。每次推送时,仅上传变更的函数:部署步骤会构建函数包,用 Brotli 压缩并计算 SHA-256 校验和,与分支上已存储的校验和及 JWT 设置比较,若一致则跳过。这减少了部署开销。若仓库有函数目录但未在 config.toml 中声明,则不会部署任何函数并给出警告。
Q&A
Supabase 分支创建时,配置、迁移和函数是并行执行的吗?
是的,配置、迁移和函数部署大部分并行执行。配置复制主项目设置,迁移应用数据库架构,函数部署复制或部署边缘函数。
GitHub 连接的分支和普通分支在获取配置和迁移时有什么不同?
GitHub 连接的分支从仓库读取 config.toml、迁移、种子文件和函数;无 Git 分支则从主项目获取架构和函数。
Supabase 分支的迁移是如何执行的?失败会怎样?
迁移按文件事务执行,每个文件作为一个事务,要么全部应用并记录历史,要么回滚不留痕迹。失败时错误会指出具体语句和位置。
边缘函数部署时,如何避免重复上传未更改的函数?
部署时对每个函数构建并压缩包,计算 SHA-256 校验和,与分支上已存储的校验和及 JWT 设置比较,若匹配则跳过上传。
如果分支创建过程中某个步骤失败,后续步骤会怎样?
失败的步骤状态为 DEAD,会阻止依赖它的后续步骤。例如迁移失败,种子和部署步骤不会运行。暂停的步骤有警告但后续仍会运行。
如何查看 Supabase 分支创建过程中的日志以排查问题?
打开项目仪表板,进入 Manage Branches,选择分支,打开其日志即可查看。故障排除指南覆盖常见问题。