PostgreSQL Field Guide

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每个项目运行 PostgreSQLPostgREST、Auth、Realtime、Storage、Functions、Dashboard 与连接池自托管与云平台功能/运维完全相同;浏览器 API 自动安全
Neoncompute node 运行 PostgreSQL 查询层compute/storage separation、page server、branch、scale-to-zerodata directory、WAL、unlogged table、恢复与普通 PG 运维相同
NhostPostgreSQL 是 databaseHasura GraphQL、Auth、Storage、FunctionsGraphQL permission 等同于全部数据库权限边界
Prisma Postgres托管 PostgreSQLPgBouncer、HTTP/edge driver、query cache、临时数据库和 Prisma 工具链operation 计费、pooling 和 extension 与任意自托管 PG 相同

这些平台适合继续使用普通 SQL、migration 和 pg_dump 思维,但仍要把平台的连接代理、休眠、备份、扩展 allowlist、API 权限和计费模型写进架构。

PostgreSQL 分支、查询层复用与新存储

项目实现路径主要目标迁移风险中心
YugabyteDBYSQL 复用 PostgreSQL query layer,底层是分布式 DocDB分布式事务、横向扩展、多区域extension、lock/isolation、catalog、DDL 与分布式成本模型
PolarDB for PostgreSQLPostgreSQL 血缘的计算存储分离分支shared storage、一写多读、云原生架构开源分支版本节奏、专用 storage/HA、与公有云版本差异
Apache CloudberryGreenplum/PG 血缘的 MPP 数据库数据仓库、大规模并行分析OLTP transaction、distribution key、SQL/extension 与运维工具
IvorySQL跟随 PostgreSQL 的 Oracle-compatible 分支PL/iSQL、Oracle syntax、package 与迁移compatibility mode、Oracle 语义、extension package 与上游同步
openGaussPostgreSQL 血缘的独立数据库内核企业部署、并行与自身生态已长期独立演进,不能把当前 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 行为
MaterializePostgreSQL-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、poolerpsql 能执行 SELECT 1
Schematype、identity/sequence、generated column、constraint、partitionORM migration 只在空库成功
SQLfunction/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

On this page