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 自动推送)

相关推荐
吴文周5 小时前
告别重复劳动:一套插件让 AI 替你写代码、修Bug、做测试、上生产
前端·后端·ai编程
Cyeam5 小时前
Roadbook CSV:一行 CSV 秒变高德地图路书
后端·开源·aigc
懒狗小前端6 小时前
做了一个 codex 的中文文档网站,做的不好可以随便喷
前端·后端
Eric_见嘉7 小时前
在职前端 Agent 配置分享
前端·后端·agent
Ares-Wang8 小时前
Flask》》 Flask-OpenID 认证、 OpenID Connect (OIDC)
后端·python·flask
掘金码甲哥8 小时前
这篇优雅安装k8s集群的姿势,请务必投喂给AI智能体, 包装包活的那种!
后端
IT_陈寒9 小时前
Vue的v-for里用index当key,我被自己坑惨了
前端·人工智能·后端
invicinble10 小时前
Spring如何把bean注册到容器里
java·后端·spring
阿丰资源10 小时前
基于SpringBoot+MySQL的网上订餐系统(附源码)
spring boot·后端·mysql
希望永不加班10 小时前
SpringBoot 敏感数据脱敏(序列化层)
java·spring boot·后端·spring