Supabase 是一个基于 PostgreSQL 的开源后端服务框架,封装了用户认证、文件存储、边缘函数等功能,为开发者提供了一套开箱即用的后端基础设施。它在 GitHub 上拥有极高的关注度,是顶级开源项目之一。
总的来说,Supabase 提供了三大部分能力:后端基础设施、前端 SDK 以及云服务选项。后端涵盖数据库、存储和鉴权;前端方面,SDK 支持 React、Vue 甚至移动端应用快速接入。作为完全开源免费的项目,既可以使用官方云服务,也能通过 Docker 自行部署完整实例。
数据库核心
进入 Supabase 官网并登录,创建组织与项目即可拥有一个完整的 PostgreSQL 实例。在左侧 Table Editor 中,可以直观地创建表、编辑字段及记录。SQL Editor 则允许直接编写和执行 SQL 语句。Database 菜单下包含了 Schema、函数、触发器、索引等所有基础功能。
插件(Extensions)是 Supabase 的一大亮点。例如安装 PostGIS 插件后,PostgreSQL 便具备了存储地理位置信息的能力,可构建地理信息系统。我们创建一个城市地图表来演示:
CREATE TABLE city_map (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
geom GEOMETRY(GEOMETRY, 4326)
);
插入测试数据后,利用插件提供的函数如 ST_Area 计算面积,或使用操作符计算距离,无需额外安装软件包,配置十分便捷。
数据库连接
除了网页操作,Supabase 支持远程直连。点击 Connect 按钮获取连接地址,可接入 DBeaver 或 Java/Python 代码。连接模式分为 Direct Connection(直连)、Session Pooler 和 Transaction Pooler。直连不支持 IPv4,若网络受限可选用 Session Pooler。Transaction Pooler 适合无状态服务,由 Supabase 自动维护连接池,降低数据库压力。
Supabase SDK
Supabase SDK 让前端框架能轻松接入后端。以 Vue 为例,初始化项目后安装 SDK:
npm install @supabase/supabase-js
在组件中引入并配置 URL 与 API Key。虽然将 Key 暴露在前端看似有风险,但得益于 RLS(行级安全策略),只要配置得当,数据访问依然安全。实现用户注册只需几行代码:
await supabase.auth.signUp({
email: '[email protected]',
password: 'SecurePassword123!'
});
验证邮件确认后账户生效。登录同理,将方法改为 signInWithPassword 即可,返回结果包含 Session 和用户信息。
RLS 行级安全策略
RLS 源自 PostgreSQL 原生功能,约束特定用户对数据的读写权限。演示前,先创建业务表 user_info,关联系统用户表 auth.users 的 ID,并启用 RLS。
需求设定为:用户仅能查看和修改自己的数据。配置 Select 策略时,选择模板'启用用户查看自身数据',核心逻辑在于匹配登录用户 ID 与表中 user_id 字段。这样即使查询语句写在前端,也无法获取他人数据。
写入保护同样有效。新建 Insert 策略限制只能插入 user_id 匹配当前用户的记录。尝试修改 user_id 插入他人数据时,会收到 403 Forbidden 错误。这解释了为何 Supabase 允许在前端直接操作数据库——安全性由 RLS 兜底。
文件存储
Storage 用于存放文件,适配 S3 协议。创建存储桶后,可拖拽上传文件。安全策略同样适用,例如限制用户仅能操作同名文件夹的文件。前端上传时,路径需严格匹配用户 ID,否则违反策略无法上传。免费版数据库上限 500MB,存储桶 1GB,空间不足时可考虑本地部署。


