首页

数据库迁移

如何管理Supabase项目的模式迁移


数据库迁移是指创建、更新或删除现有数据库模式的SQL语句。这是一种常用的方式来跟踪数据库随时间的变化。

数据库模式迁移

在本指南中,我们将创建一个名为 employees 的表,并演示如何对其进行修改。

您需要先安装 Supabase CLI 并启动本地开发环境。

1

创建第一个迁移文件

首先,生成一个新的迁移文件来存储创建 employees 表所需的SQL语句。

Terminal
1
supabase migration new create_employees_table
2

向迁移文件添加SQL语句

这将在supabase/migrations目录中创建一个新的迁移文件。

在该文件中添加创建 employees 表的SQL语句。

supabase/migrations/<timestamp>_create_employees_table.sql
1
2
3
4
5
6
create table if not exists employees ( id bigint primary key generated always as identity, name text not null, email text, created_at timestamptz default now());
3

应用第一个迁移

运行此迁移以创建 employees 表。

现在您可以在本地仪表板中查看新建的 employees 表。

Terminal
1
supabase migration up
4

修改员工表

接下来,通过添加 department 列来修改您的 employees 表。

Terminal
1
supabase migration new add_department_column
5

向表添加新列

在新的迁移文件中添加创建 department 列的SQL语句。

supabase/migrations/<timestamp>_add_department_column.sql
1
2
alter table if exists public.employeesadd department text default 'Hooli';
6

应用第二个迁移

运行此迁移以更新现有的 employees 表。

Terminal
1
supabase migration up

最后,您应该在本地仪表板中看到 employees 表已添加了 department 列。

数据种子填充

既然您已经通过迁移脚本管理数据库,那么每次重置数据库时使用一些种子数据将会非常有用。

1

填充数据表

在 supabase/seed.sql 中创建种子脚本。

在该文件中添加向 employees 表插入数据的 SQL 语句。

supabase/seed.sql
1
2
3
4
5
6
insert into public.employees (name)values ('Erlich Bachman'), ('Richard Hendricks'), ('Monica Hall');
2

重置数据库

重置数据库以重新应用迁移并用种子数据填充。

Terminal
1
supabase db reset

现在您应该在控制面板中看到 employees 表以及种子数据了!所有的数据库变更都被记录在代码中,您可以随时重置到已知状态,并包含种子数据。

差异比对变更

如果您熟悉SQL并能够自如地创建表和列,这个工作流程非常适用。如果不熟悉,您仍然可以使用仪表板创建表和列,然后通过CLI比对变更并生成迁移文件。

1

通过仪表板创建表

创建一个名为cities的新表,包含idnamepopulation列。

然后生成模式差异

Terminal
1
supabase db diff -f create_cities_table
2

将模式差异添加为迁移

系统会自动为您创建新的迁移文件。

您也可以直接从表编辑器中复制表定义。

supabase/migrations/<timestamp>_create_cities_table.sql
1
2
3
4
5
create table "public"."cities" ( "id" bigint primary key generated always as identity, "name" text, "population" bigint);
3

测试迁移

通过重置本地数据库来测试新的迁移文件。

Terminal
1
supabase db reset

最后一步是将这些变更部署到实际的Supabase项目中。

部署您的项目

您一直在本地开发项目,通过迁移(migration)对表结构进行修改。现在是时候将项目部署到Supabase平台,开始扩展到数百万用户了!

前往Supabase创建一个新项目进行部署。

1

登录Supabase CLI

使用自动生成的个人访问令牌登录Supabase CLI。

Terminal
1
supabase login
2

关联您的项目

通过屏幕提示选择,将本地项目关联到远程项目。

Terminal
1
supabase link
3

部署数据库迁移

将您的迁移文件推送到远程数据库。

Terminal
1
supabase db push
4

部署数据库种子数据(可选)

推送迁移文件并为远程数据库填充种子数据。

Terminal
1
supabase db push --include-seed

当您在Supabase上访问已部署的项目时,将会看到一个新的employees表,其中包含您在上文第二个迁移中添加的department列。