Firebase vs Supabase
Google全面的移动开发平台Firebase,对阵开源PostgreSQL替代方案Supabase。在选择后端即服务(BaaS)时该如何取舍?
围绕 Postgres 构建的完整后端:auth、storage、realtime、functions
纯粹的无服务器 Postgres:copy-on-write 分支,如今是 Databricks 的引擎
这不是“哪个更好”的问题,而是“我需要什么”的问题。如果你想要 Auth+Storage+Realtime+Functions 在一个成熟的平台上一次性到位,选 Supabase。如果你只想要 Postgres,搭配 branch-per-PR 和按计算秒计费,Neon 更有优势——Auth/Storage/Functions 在 2026 年 9 月 17 日已 GA,但实际生产验证时间还短得多。 Prisma/Drizzle 在两者上都能运行;连接池 transaction-mode 下存在已知的 prepared statement 不兼容问题,需要额外配置。ORM 的选择并不能决定最终结果。
| 分类 | Supabase | Neon |
|---|---|---|
| 性能 | 8/10 | 8/10 |
| 学习难易度 | 8/10 | 7/10 |
| 生态系统 | 9/10 | 6/10 |
| 社区 | 9/10 | 6/10 |
| 就业市场 | 6/10 | 6/10 |
| 面向未来 | 8/10 | 7/10 |
// Supabase — RLS 保护的查询 + Storage 上传(TypeScript)
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_ANON_KEY!
)
// 由 RLS 策略 "select_own_posts" 保护的表
const { data: posts, error } = await supabase
.from('posts')
.select('id, title, created_at')
.eq('author_id', userId)
.order('created_at', { ascending: false })
.limit(20)
if (error) throw error
// 同一项目内的 Storage —— 带签名的上传 URL
const { data: uploadUrl } = await supabase.storage
.from('avatars')
.createSignedUploadUrl(`${userId}/profile.png`)
// Realtime —— 通过 Postgres Changes 实现实时监听
supabase
.channel('posts-changes')
.on(
'postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'posts' },
(payload) => console.log('新帖子:', payload.new)
)
.subscribe()# Neon — CLI + serverless driver(bash + TypeScript)
# --- bash:每个 PR 打开/删除一个分支(CI 步骤)---
# 1)从主分支创建即时 copy-on-write 克隆
neon branches create \
--project-id $NEON_PROJECT_ID \
--name "preview/pr-${PR_NUMBER}" \
--parent main
# 2)获取该分支的 pooled 连接字符串
neon connection-string "preview/pr-${PR_NUMBER}" --pooled
# 3)PR 关闭后删除分支(保持预览环境整洁)
neon branches delete "preview/pr-${PR_NUMBER}" --project-id $NEON_PROJECT_ID
// --- TypeScript:在无服务器环境(Vercel Edge/Cloudflare Workers)中使用基于 HTTP 的驱动 ---
import { neon } from '@neondatabase/serverless'
const sql = neon(process.env.DATABASE_URL!) // pooled,位于 PgBouncer 之后
const rows = await sql`
SELECT id, title, created_at
FROM posts
WHERE author_id = ${userId}
ORDER BY created_at DESC
LIMIT 20
`这不是“哪个更好”的问题,而是“我需要什么”的问题。如果你想要 Auth+Storage+Realtime+Functions 在一个成熟的平台上一次性到位,选 Supabase。如果你只想要 Postgres,搭配 branch-per-PR 和按计算秒计费,Neon 更有优势——Auth/Storage/Functions 在 2026 年 9 月 17 日已 GA,但实际生产验证时间还短得多。 Prisma/Drizzle 在两者上都能运行;连接池 transaction-mode 下存在已知的 prepared statement 不兼容问题,需要额外配置。ORM 的选择并不能决定最终结果。
获取免费咨询简短的答案是:取决于你的需求。如果你想要纯粹的、可分支的无服务器 Postgres,并将供应商锁定降到最低,选 Neon;如果你想要 auth、storage、realtime 和 edge functions 在一个平台上一次性准备好,选 Supabase。这个决定归根结底不是“哪个更流行”,而是“我需要的是一个平台,还是仅仅一个数据库”。