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

相关推荐
青柠编程2 小时前
基于Spring Boot的选课管理系统架构设计
java·spring boot·后端
码事漫谈5 小时前
C++内存泄漏排查:从基础到高级的完整工具指南
后端
王嘉俊9255 小时前
ThinkPHP 入门:快速构建 PHP Web 应用的强大框架
开发语言·前端·后端·php·框架·thinkphp
码事漫谈5 小时前
C++多线程数据竞争:从检测到修复的完整指南
后端
Code blocks6 小时前
SpringBoot快速生成二维码
java·spring boot·后端
朝阳5816 小时前
使用过程宏实现自动化新增功能
后端·rust
大厂码农老A6 小时前
P10老板一句‘搞不定就P0’,15分钟我用Arthas捞回1000万资损
java·前端·后端
Pomelo_刘金7 小时前
常见的幂等方案
后端
tonydf7 小时前
Blazor Server项目里,集成一个富文本编辑器
后端
文心快码BaiduComate7 小时前
文心快码已接入GLM-4.6模型
前端·后端·设计模式