Supabase PostgreSQL 平台
Supabase 为每个项目提供完整 PostgreSQL 及 Auth、Storage、Realtime 和自动 API——平台边界在哪里、生产前验证什么,2026-08 核对。
Supabase 为每个项目提供一个完整、独立的 PostgreSQL 数据库,并在其周围集成平台服务:Auth、Storage、Realtime、自动生成的 REST 与 GraphQL API(PostgREST)、Edge Functions,以及 Supavisor 连接池。数据库是真实的 PostgreSQL——可以用任何客户端连接、使用普通扩展——但安全模型和日常运维由平台塑造。与其他方案的定位对比见云服务版图。
平台包含什么
- 每项目一个完整 PostgreSQL 实例,同时提供直连和池化连接串。
- 与数据库集成的 Auth:用户身份存放在
auth.users,JWT 声明可在 SQL 内读取。 - 自动生成的数据 API,把 schema 中的表直接暴露给浏览器和移动客户端。
- 基于 PostgreSQL 逻辑复制的 Realtime 推送。
- Storage 与 Edge Functions,处理文件和靠近数据库的服务端逻辑。
这种捆绑正是选择 Supabase 的理由:一个平台替代整个后端层。它同时也是需要接受的主要代价——采用 Auth、Storage、Realtime 和 API 越多,应用与 Supabase 特有 schema 和服务的耦合就越深。
RLS 是安全边界
由于浏览器客户端可以通过自动生成的 API 直接访问表,行级安全不是加固选项,而是安全模型本身:
ALTER TABLE notes ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users can read their own notes"
ON notes FOR SELECT
USING (user_id = auth.uid());
CREATE POLICY "users can insert their own notes"
ON notes FOR INSERT
WITH CHECK (user_id = auth.uid());auth.uid() 从请求的 JWT 中读取用户 id,因此前端可以直接经 API 查询,由数据库强制所有权边界。三条规则保证这套模型不失效:
- 对每张经 API 暴露的表启用 RLS,包括之后新增的表——schema 暴露什么,API 就暴露什么。
- 用匿名和已认证两种角色测试策略,而不是只用控制台的 service 连接验证。
- 永远不要向客户端下发
service_rolekey;它会完全绕过 RLS。
需要接受的差异
- 备份与 PITR 取决于套餐。 免费计划没有自动备份和 PITR——当前数字见免费 PostgreSQL 选型——付费档位的保留期和恢复粒度也不同。写入数据前,确认备份文档与你的 RPO 匹配。
- 连接预算由平台决定。 直连连接数有限;serverless 和高并发客户端走 Supavisor,其 transaction pooling 模式会限制 prepared statement 等会话级特性。用池化连接串测试你的驱动和 ORM,而不是只测直连。
- Realtime 消耗数据库资源。 它经逻辑复制流式推送变更,高写入频率的表和过大的 publication 会在同一个服务查询的实例上产生真实的 WAL 和复制负载。
- 退出时需要拆解平台组件。
pg_dump能导出数据,但 Auth 用户、Storage 对象、Realtime 订阅和 Edge Functions 都是平台服务,dump 不会包含它们。
生产前验证
- 每张经 API 暴露的表都已启用 RLS,并从匿名和已认证两种上下文完成策略测试。
- 对照实际付费的套餐确认备份、PITR 和恢复粒度,并完成一次真实恢复演练。
- 用池化连接串测试驱动、ORM 和迁移工具,包括 prepared statement 行为。
- 按生产形态的写入频率压测 Realtime 负载。
- 完成一次覆盖
pg_dump加 Auth、Storage、函数处置方案的导出演练。
2026-08 核对
套餐额度、备份覆盖范围和平台功能按 Supabase 官方文档核对于 2026-08-06,变化频繁;采购时请重新核实。
池化、监控和恢复演练等跨平台内容见生产环境技术栈。
Last updated on