Supabase migration 开发实践

这两天在对接 Supabase 的数据库,了解到 Supabase 支持通过 supabase-cli 来使用 migration,因此把官网的相关文档都看了一遍。

但是官方的文档有点乱,一会儿是在 Studio 中创建表、一会儿手工创建 migration,一会儿又通过 diff 来生成,然后还有 supabase/scheams/,晕菜了。

在认真研究并本地测试之后,简单总结一下我的开发实践。

开发环境:

  • Macbook Pro Apple M3

  • brew

  • Docker Desktop

0x01. 安装 supabase-cli 工具

bash 复制代码
brew install supabase/tap/supabase

0x02. 给项目初始化 supabase 环境

sql 复制代码
supabase initsupabase start

start 执行完成之后,本地docker会运行一套supabase环境,其中包括一个纯净的supabase db

0x03. migration的生成方式

创建 migration 文件有两种方式:手工编写和自动生成,推荐使用自动创建migration的方式。

声明式定义schema

新版本的 supabase-cli 支持声明式定义schema,即在 supabase/scheams/ 目录下,写完整的schema,然后通过 supabase db diff 来创建 migration

supabase db diff 的时候,如果本地存在 supabase/scheams/ 目录,则会和本地目录中定义的 schema 对比,根据差异创建 migration;否则和本地数据库来对比。

使用 supabase/scheams/ 的好处是,对于任意一个给定的 schema,所有的定义都在一个文件中,是一个完整的 schema 定义,一目了然。

自动创建 migration

三步操作:

  1. 创建一个新的 migration 文件,比如创建新表employees:

    supabase migration new create_employees_table

  2. 执行 diff 获取本地数据库的变更

    supabase db diff

  3. 把上面命令输出的sql复制到生成的migration文件中

当然,省事点的,可以直接用diff命令把migration创建出来:

复制代码
supabase db diff -f create_employees_table

0x04. migration 的工作流程

创建 migration 文件

见上一节。

将 migration 应用到本地数据库

复制代码
supabase migration up

将 migration 推送到 Supabase

  1. 登陆 Supabase

    supabase login

  2. 将本地环境和 Supabase 中的项目关联

    supabase link --project-ref xxxxxx

这里的 project-ref 有两种获取方式:

  • 访问 Supabase 项目,从 URL 中获取,比如项目:https://supabase.com/dashboard/project/ejncwnlcyadphxwcnfacproject-id 就是最后的 ejncwnlcyadphxwcnfac

  • 执行 supabase link,从列表中选择/获取

  1. migration 推送到远程

    supabase db push

如果有一些数据需要执行 seed.sql 初始化,可以追加--include-seed 参数,即:

css 复制代码
supabase db push --include-seed

0x05. 最佳实践

避免直接操作 Supabase 线上环境。

所有数据库的操作,都先在本地环境处理,生成对应的migration;本地测试通过之后,推送到远程。

不论是自己开发,还是团队开发,使用的都是同样的流程:

  1. 更新代码,获取最新的 migration

  2. 执行 supabase migration up 将代码库中的新 migration 更新到本地数据库

  3. 创建新的 migration 并应用到本地数据库

  4. 测试完成之后,将新的 migration 提交到代码仓库并发起 PR(个人开发可以直接 commit

  5. Review PR 并合并到 master 分支

  6. 功能发布的时候,将 migration 推送到线上(或者由 Github Action 自动推送)

相关推荐
砍材农夫8 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT | MQTT 设备模拟器
java·spring boot·后端·物联网·struts·spring·netty
BingoGo23 分钟前
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
后端
jay神25 分钟前
基于 Python + Flask + Vue 的校内求职互助平台
前端·vue.js·后端·python·flask·毕业设计
用户2986985301433 分钟前
Java 开发中读取与解析 Word 文档的实践记录
java·后端
AskHarries38 分钟前
如何判断市场是否拥挤
后端
日月云棠43 分钟前
14 Error 与 Exception —— 异常分类与处理策略
后端
学以智用1 小时前
.NET Core 完整特性速查表(终极版)
后端·.net
无风听海1 小时前
ASP.NET Core CORS 深度解析:从 AddCors 到 CSRF 防御
后端·asp.net·csrf
XovH1 小时前
第28篇 k8s之Service:为 Pod 提供稳定的访问入口
后端
用户2181697049301 小时前
Gin (三) 中间件 并发测试
后端