一句行话能概括 Supabase 的 engineering culture:"Don't build what you can borrow."(能借的不自己造)。这不是偷懒,而是对开源生态的尊重——它把 PostgREST、GoTrue、Realtime、Kong、PgBouncer 这些成熟项目缝成一个平台,自己只写最关键的胶水和体验层。这一节我们拆解它背后的三条哲学:开放、可组合、企业级。
开放不是把仓库设成 public 就完了,Supabase 的开放体现在三个层面:
我们用一段 CLI 命令说明"开放"落到操作上是什么样——本地起一套完整 Supabase,和云端用同一套镜像:
# 安装并初始化本地开发栈(Docker 镜像与云端一致) npm install -g supabase supabase init supabase start # Studio: http://127.0.0.1:54323
结果:你本地跑的和云上跑的是同一套开源组件,意味着本地验证过的 SQL 和策略,推到生产不会"水土不服"。这是开放带来的直接红利——开发和生产环境同构。
很多 BaaS 想把你整套业务锁在它的 API 里,Supabase 反其道:你可以只取几块。下面这张 SVG 画了"可组合"的形态——中间的 Postgres 是必选地基,其余模块按需挂载,灰色的表示你可以不用。

可组合的工程含义是:你可以用 Supabase 只当数据库 + 认证,其余业务逻辑用自家 Go 服务写;也可以全栈都依赖它。我们见过团队只用它的 Postgres + RLS 做权限网关,API 层自己用 NestJS 写——Supabase 不拦你。
开源常被误读成"小团队玩玩"。Supabase 的企业级底线体现在四处:
下面代码展示企业级能力的典型用法——给一张表加审计列和触发器,任何 UPDATE 都留下操作人痕迹:
-- 审计列 alter table public.articles add column updated_by uuid, add column updated_at timestamptz default now(); -- 自动记录修改人(来自 JWT) create or replace function public.set_updated_by() returns trigger language plpgsql as $$ begin new.updated_by = auth.uid(); new.updated_at = now(); return new; end; $$; create trigger trg_articles_updated before update on public.articles for each row execute function public.set_updated_by();
结果:哪怕有人绕过前端、直接用 SQL 改表,触发器也会把 auth.uid() 写进 updated_by。审计不是靠"大家自觉调 API",而是数据库层兜底。
背景:一家做小额信贷的公司要合规上云,要求数据可审计、权限细到行、且未来能迁出避免锁定。
操作:
loans 表加 RLS,借款人只能看自己的贷款,审核员按部门看辖区内的:alter table public.loans enable row level security; create policy "借款人看自己" on public.loans for select using (auth.uid() = borrower_id); create policy "审核员看辖区" on public.loans for select using ( exists ( select 1 from public.auditors a where a.user_id = auth.uid() and a.region = loans.region ) );
结果:合规团队拿到了"数据可导出、权限在库内强制、操作有审计"三件套,顺利通过等保测评。
解读:这个案例里三条哲学不是装饰。开放让它能改源码适配内网,可组合让它不绑架既有系统,企业级让它过得了审计。缺任何一条,这家公司都不会选它。
变式:如果该公司后来要上向量做"相似欺诈模式检索",按可组合原则直接加 pgvector 扩展即可,不影响前面已经过审的权限模型。
提醒:可组合的另一面是:你不用某模块时,要自己补上对应能力。比如不用 Edge Functions 就得有自己的服务跑业务逻辑,别以为"Supabase 全包了"。
建议:我们判断:三条哲学里"可组合"最容易被低估。它意味着 Supabase 能渐进式进入你现有架构,而不是要求你推倒重来——这对大组织特别关键。
下一节我们看 Supabase 是怎么从一组开源组件长成平台的,以及社区在里头扮演什么角色。