PostgreSQL 血缘、分支与兼容数据库
区分 Supabase、Neon、YugabyteDB、CockroachDB、Cloudberry、IvorySQL、Materialize、Gel 与 FerretDB 的 PostgreSQL 血缘和兼容边界
“基于 PostgreSQL”“使用 PostgreSQL 协议”和“可以替换 PostgreSQL”是三个不同结论。兼容性至少有五层:
驱动可以连接
→ pgwire 消息可交换
→ SQL / 类型 / 函数兼容
→ catalog / extension / transaction 行为兼容
→ backup / replication / upgrade / failure 语义兼容越靠下,越需要真实迁移和故障测试。产品自称 PostgreSQL-compatible,通常只描述其中一部分。
PostgreSQL 为核心的开发平台
| 平台 | PostgreSQL 在哪里 | 平台增加了什么 | 不能直接假设 |
|---|---|---|---|
| Supabase | 每个项目运行 PostgreSQL | PostgREST、Auth、Realtime、Storage、Functions、Dashboard 与连接池 | 自托管与云平台功能/运维完全相同;浏览器 API 自动安全 |
| Neon | compute node 运行 PostgreSQL 查询层 | compute/storage separation、page server、branch、scale-to-zero | data directory、WAL、unlogged table、恢复与普通 PG 运维相同 |
| Nhost | PostgreSQL 是 database | Hasura GraphQL、Auth、Storage、Functions | GraphQL permission 等同于全部数据库权限边界 |
| Prisma Postgres | 托管 PostgreSQL | PgBouncer、HTTP/edge driver、query cache、临时数据库和 Prisma 工具链 | operation 计费、pooling 和 extension 与任意自托管 PG 相同 |
这些平台适合继续使用普通 SQL、migration 和 pg_dump 思维,但仍要把平台的连接代理、休眠、备份、扩展 allowlist、API 权限和计费模型写进架构。
PostgreSQL 分支、查询层复用与新存储
| 项目 | 实现路径 | 主要目标 | 迁移风险中心 |
|---|---|---|---|
| YugabyteDB | YSQL 复用 PostgreSQL query layer,底层是分布式 DocDB | 分布式事务、横向扩展、多区域 | extension、lock/isolation、catalog、DDL 与分布式成本模型 |
| PolarDB for PostgreSQL | PostgreSQL 血缘的计算存储分离分支 | shared storage、一写多读、云原生架构 | 开源分支版本节奏、专用 storage/HA、与公有云版本差异 |
| Apache Cloudberry | Greenplum/PG 血缘的 MPP 数据库 | 数据仓库、大规模并行分析 | OLTP transaction、distribution key、SQL/extension 与运维工具 |
| IvorySQL | 跟随 PostgreSQL 的 Oracle-compatible 分支 | PL/iSQL、Oracle syntax、package 与迁移 | compatibility mode、Oracle 语义、extension package 与上游同步 |
| openGauss | PostgreSQL 血缘的独立数据库内核 | 企业部署、并行与自身生态 | 已长期独立演进,不能把当前 PostgreSQL 兼容性当作默认 |
| OrioleDB | 面向 PostgreSQL 的新 storage engine,通常需要其支持的构建 | undo-based MVCC、copy-on-write/checkpoint、降低某些膨胀 | binary/build、WAL/backup、extension、major upgrade 与故障恢复 |
这里的“血缘”不等于 drop-in replacement。特别是分布式存储会改变 transaction retry、hot key、sequence、foreign key、lock 和一致性/延迟取舍。
支持 PostgreSQL 客户端,但不是 PostgreSQL
| 项目 | pgwire / PostgreSQL 的作用 | 实际定位 |
|---|---|---|
| CockroachDB | 实现 pgwire 和大量 PostgreSQL syntax | 独立分布式 SQL 数据库;不等同于 PostgreSQL extension/catalog/transaction 行为 |
| Materialize | PostgreSQL-compatible driver 可查询 view | 流式增量计算与实时数据层,不是通用 OLTP PostgreSQL |
| Gel | 底层使用 PostgreSQL 技术并提供 SQL interface/生态连接 | graph-relational database,主要数据模型和 query language 是 Gel/EdgeQL |
server_version 也可能只是兼容接口
部分兼容数据库会报告 PostgreSQL 风格的 server_version 或提供相似 catalog。版本字符串只能帮助驱动选择协议路径,不能证明服务器运行同一 PostgreSQL 内核。
FerretDB 是反方向兼容
FerretDB 2.x 接收 MongoDB 5.0+ wire protocol,把请求转换为 SQL,并使用带 DocumentDB extension 的 PostgreSQL 作为 database engine:
MongoDB driver → FerretDB proxy → PostgreSQL + DocumentDB extension因此它不是“PostgreSQL client 连接一个 MongoDB-compatible server”,而是“MongoDB client 使用 PostgreSQL-backed document database”。验证重点是 MongoDB command/BSON 兼容矩阵、DocumentDB extension、索引、transaction、backup 与版本组合。
迁移兼容性测试矩阵
| 层 | 必测内容 | 不能接受的替代证据 |
|---|---|---|
| 连接 | TLS、SCRAM、startup parameter、prepared statement、pooler | psql 能执行 SELECT 1 |
| Schema | type、identity/sequence、generated column、constraint、partition | ORM migration 只在空库成功 |
| SQL | function/operator、JSONB、CTE/window、collation、全文 | 跑过简单 CRUD |
| 事务 | isolation、retry、row lock、deadlock、advisory lock | 宣传页写“ACID” |
| 扩展 | exact version、operator/index method、upgrade script | 扩展名称出现在 allowlist |
| 运维 | backup/PITR、CDC、replication、catalog、monitoring | 有“backup”按钮 |
| 故障 | node/zone failure、连接收敛、RPO/RTO、回滚 | vendor benchmark 或 SLA 数字 |
建议先运行应用测试和 migration,再恢复脱敏生产副本,最后做切换与回退演练。对于 CockroachDB/YugabyteDB 这类分布式数据库,还要主动制造 transaction conflict、hot partition 和节点故障。
如何做选择
- 要标准 PostgreSQL 生态与最低迁移成本:优先社区 PostgreSQL 或明确运行 PostgreSQL 的托管服务。
- 要 BaaS:Supabase;要 GraphQL-first:Nhost;要 branch/scale-to-zero:Neon。
- 要多区域分布式 OLTP:把 YugabyteDB 与 CockroachDB 作为新数据库评估,不视为配置项。
- 要 MPP warehouse:评估 Cloudberry,不用 OLTP benchmark 推导分析性能。
- 要 Oracle migration:评估 IvorySQL,并保留 PostgreSQL mode 与 Oracle mode 的差异测试。
- 要实时增量 view:Materialize 是数据层候选,不是主 OLTP 数据库的透明替换。
云服务免费层见 免费 PostgreSQL 云数据库选型;真正的扩展选型见 PostgreSQL 扩展生态。
Last updated on