从 Supabase 迁移
CloudBase PG 的设计在很多关键点上有意对齐 Supabase:相同的 auth / storage schema 划分、对齐的 JWT claims(sub / role / aud)、相同的 anon / authenticated / service_role 三角色模型、相同的「GRANT + RLS」双层权限范式。绝大多数 Supabase 项目可以以最小改动迁移过来。
本文聚焦"代码与 SQL 层面"的对齐与差异, 不涉及云资源迁移工具与计费层面的内容。
心智模型对照
| 概念 | Supabase | CloudBase PG | 说明 |
|---|---|---|---|
| 数据库角色 | anon / authenticated / service_role | anon / authenticated / service_role | ✅ 名称语义一致 |
| 账号 schema | auth | auth | ✅ 名称一致 |
| 云存储 schema | storage | storage | ✅ 名称一致 |
JWT sub | uuid 字符串 | varchar(64) 字符串 | ✅ 直接兼容 |
JWT role | anon / authenticated / service_role | anon / authenticated / service_role | ✅ 直接兼容 |
| 客户端 SDK | @supabase/supabase-js | @cloudbase/js-sdk | API 风格相近,主要方法名对齐 |
| 行级权限 | RLS Policy | RLS Policy | ✅ 标准 PostgreSQL 特性,写法完全一致 |
| 自动 REST API | PostgREST | PostgREST | ✅ 同一开源项目,查询语法基本一致 |
| RPC 调用 | .rpc() | .rpc() | ✅ 直接兼容 |
| 文件存储权限 | RLS over storage.objects | RLS over storage.objects | ✅ 同一思路 |
| anon Token | anon API key | anon Publishable Key | ✅ 同一概念 |
| service Token | service_role API key | service_role API Key | ✅ 同一概念 |
关键差异
| 差异点 | Supabase | CloudBase PG | 迁移动作 |
|---|---|---|---|
| REST 端点路径 | /rest/v1/<table> | /v1/rdb/rest/<table> | 修改 base URL |
| 认证端点路径 | /auth/v1/... | /auth/v1/... | ✅ 一致 |
| 域名 | <project>.supabase.co | <envId>.api.tcloudbasegateway.com | 替换域名 |
| Realtime(实时订阅) | ✅ 内置 | ❌ 不支持 | 改为轮询 / WebSocket 自建 |
| GraphQL API | ✅ pg_graphql | ❌ 不支持 | 仅使用 RESTful |
| 数据库 branching | ✅ | ❌ 不支持 | 用环境隔离(dev / staging / prod) |
| DDL 通道 | 直连数据库 / Studio | 控制台 SQL 编辑器 / 云 API ExecutePGSql | 用 ExecutePGSql 替换直连 SQL 客户端的部分流程 |