Supabase
Supabase 是一个以 PostgreSQL 为核心的云数据库开发平台,它围绕 PostgreSQL 构建,提供包括数据库、身份认证、实时订阅、文件存储和边缘函数等后端服务,并通过 RESTful 和 GraphQL API 将 PostgreSQL 的能力暴露给开发者,无需自己搭建后端服务。
在 ShipAny 项目中,你可以使用 Supabase 来存储和管理你的数据。
快速开始
你可以按照以下步骤,在 ShipAny 项目中接入 Supabase。
访问 Supabase 官网,注册一个 Supabase 账号。.
进入 Supabase 控制台,创建一个项目。
输入项目名称,点击 Generate a password,生成随机密码,点击 Copy 按钮,复制密码。

进入上一步创建的项目管理页面,点击顶部的 Connect 按钮,切换到 ORMs -> Drizzle 标签页,复制 DATABASE_URL 的值。

把 [YOUR-PASSWORD] 替换成上一步生成的随机密码,得到 Supabase 项目的 DATABASE_URL。类似这种:
postgresql://postgres.seilzcqsafesmugglqlk:xxxxxx@aws-1-ap-northeast-1.pooler.supabase.com:6543/postgres使用 psql 工具,测试数据库是否能正常连接。
psql "postgresql://postgres.seilzcqsafesmugglqlk:xxxxxx@aws-1-ap-northeast-1.pooler.supabase.com:6543/postgres"请自行搜索
psql工具的安装方法。一般情况,在本地安装PostgreSQL后,会自带psql工具。
复制上一步设置的数据库 DATABASE_URL。
在项目的环境变量文件中,填入 Supabase 数据库相关的配置。
- 本地开发环境变量文件
.env.development - 生产环境变量文件
.env.production - Cloudflare Workers 环境变量文件
wrangler.toml
DATABASE_PROVIDER = "postgresql"
DATABASE_URL = "supabase-database-url"
DB_SCHEMA_FILE = "./src/config/db/schema.postgres.ts"
DB_MIGRATIONS_OUT = "./src/config/db/migrations"- DATABASE_PROVIDER,必填,固定值
postgresql - DATABASE_URL,必填,填 Supabase 数据库的
DATABASE_URL - DB_SCHEMA_FILE,必填,固定值
./src/config/db/schema.postgres.ts - DB_MIGRATIONS_OUT,选填,数据库迁移文件输出路径,默认值
./src/config/db/migrations,可以根据数据库类型选择不同的输出路径
使用 Supabase 数据库时,数据表结构定义在 ./src/config/db/schema.postgres.ts 文件中,你需要导出这个文件的数据表。
打开 ./src/config/db/schema.ts 文件,修改内容为:
export * from './schema.postgres';执行以下命令,迁移数据表
pnpm db:generate
pnpm db:migrate你可以在 Supabase 控制台 管理数据库,也可以在本地执行命令:
pnpm db:studio打开数据库管理面板。
自定义
修改数据表
如果你需要新增数据表,或者修改数据表字段,可以打开 ./src/config/db/schema.postgres.ts 文件,修改数据表结构。
修改完成后,执行以下命令,迁移数据表
pnpm db:generate
pnpm db:migrate修改数据库连接
如果你需要修改数据表连接参数,比如配置自定义选项、连接池等,可以修改 ./src/core/db/postgres.ts 文件中的逻辑。
在进行数据操作时,默认使用的是 ./src/core/db/index.ts 导出的 db() 对象,导出类型是 any,在某些情况下,可能会缺乏类型提示。
import { db } from '@/core/db';
import { user } from '@/config/db/schema';
const [result] = await db().select().from(user).limit(1);如果你希望使用强类型的数据库对象,可以在操作数据时,使用以下方式获取数据库对象:
import { dbPostgres } from '@/core/db';
import { user } from '@/config/db/schema';
const [result] = await dbPostgres().select().from(user).limit(1);或者:
import { getPostgresDb } from '@/core/db/postgres';
import { user } from '@/config/db/schema';
const [result] = await getPostgresDb().select().from(user).limit(1);部署到 Cloudflare Workers
Supabase 数据库支持部署到 Cloudflare Workers,也支持使用 Hyperdrive 加速数据库访问。
使用 Hyperdrive 加速数据库访问的配置参考:配置 Hyperdrive。
在 Cloudflare Workers 部署项目使用 Supabase 数据库的 wrangler.toml 部分内容参考:
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "your-hyperdrive-config-id"
localConnectionString = "postgresql://xxx:xxxxxx@xxx.supabase.com:6543/postgres"
[vars]
DATABASE_PROVIDER = "postgresql"
DATABASE_URL = "postgresql://xxx:xxxxxx@xxx.supabase.com:6543/postgres"通过 Schema 隔离数据
Supabase 每新建一个项目,需要额外支付 10 美金/月的基础费用。如果你的项目比较多,可以考虑复用同一个 Supabase 项目,通过 Schema 隔离数据。
Supabase 使用 public 作为默认 Schema。在同一个 Supabase 项目中,可以创建多个 Schema,来存储多个不同项目的数据。
进入 Supabase 项目的 Table Editor 页面,点击 schema 下拉框,点击 Create a new schema,输入 Schema name 创建自定义 Schema。
比如这里创建一个名为 project_2 的 Schema。

在新项目的环境变量文件中,填入 Supabase 数据库相关的配置。
- 本地开发环境变量文件
.env.development - 生产环境变量文件
.env.production - Cloudflare Workers 环境变量文件
wrangler.toml
# supabase
DATABASE_PROVIDER = "postgresql"
DATABASE_URL = "postgresql://xxx:xxx.pooler.supabase.com:6543/postgres"
DB_SCHEMA_FILE = "./src/config/db/schema.postgres.ts"
DB_MIGRATIONS_OUT = "./src/config/db/migrations_project_2"
DB_SCHEMA = "project_2"
DB_MIGRATIONS_SCHEMA = "project_2"
DB_MIGRATIONS_TABLE = "__drizzle_migrations"- DATABASE_PROVIDER,必填,固定值
postgresql - DATABASE_URL,必填,填 Supabase 数据库的
DATABASE_URL - DB_SCHEMA_FILE,必填,固定值
./src/config/db/schema.postgres.ts - DB_MIGRATIONS_OUT,选填,数据库迁移文件输出路径,默认值
./src/config/db/migrations,可以根据数据库类型和项目名称选择不同的输出路径 - DB_SCHEMA,选填,数据库 Schema 名称,默认值
public,填入新项目的 Schema 名称,达到隔离数据的目的 - DB_MIGRATIONS_SCHEMA,选填,数据库迁移 Schema 名称,默认值
drizzle,这里填入新项目的 Schema 名称,达到隔离数据的目的 - DB_MIGRATIONS_TABLE,选填,数据库迁移表名称,默认值
__drizzle_migrations,可以保持不变。
执行以下命令,迁移数据表
pnpm db:generate
pnpm db:migrate你可以在 Supabase 控制台 ,切换到新项目的 Schema,管理数据表。
也可以在本地执行命令:
pnpm db:studio打开数据库管理面板,切换到新项目的 Schema,管理数据表。