内容提要
作者在PGConf.dev 2026介绍了与Hettie Dombrovskaya合作的“建立PostgreSQL标准”讨论,延续里加共识的细粒度测试矩阵。会前发布了参考实现postgres-compat,包含200项pg_regress回归测试、117项pg_isolation_regress隔离测试及74个YAML探针(55个核心、19个可选)。原则为:仅核心失败才算失败、静默失败算失败、适配托管服务、厂商自行发布报告。目前仅支持单节点,尚未覆盖多节点复制及Patroni等工具。
延伸解读
测试框架的务实取舍
postgres-compat 直接复用 PostgreSQL 自带的 pg_regress 和 pg_isolation_regress 套件,对目标逐字节比对输出,而非另写 SQL 测试。这降低了维护成本,也确保测试与上游行为一致。YAML 探针则补充上游套件无法在任意服务器上表达的场景,如静默失败和 contrib 扩展行为。这种分层设计让兼容性评估更贴近真实使用,但依赖上游测试的覆盖范围。
厂商自报告与社区验证
框架要求厂商自行发布 report.yaml,社区可复现验证但不充当守门人。这避免了中心化认证的瓶颈,也把举证责任交给厂商。不过,报告的可信度取决于复现的便利性和社区参与度。目前仓库公开且支持 PostgreSQL 14 到 18,但尚无正式发布,实际采用效果有待观察。
单节点局限与未来方向
当前工具仅连接单一目标,因此里加共识中需要第二节点的场景——如双向逻辑复制、混合原生与厂商节点的集群——尚未覆盖,对 Patroni、repmgr 等工具的兼容性也未测试。作者提到正与驱动维护者讨论纳入驱动回归测试,因为驱动也是兼容性的关键部分。这些空白意味着现有报告不能代表完整生产环境。
Q&A
postgres-compat 是什么?它包含哪些测试内容?
postgres-compat 是 Riga 框架的参考实现,用于测试 PostgreSQL 兼容性。它运行三个测试引擎并生成一份报告:直接运行 PostgreSQL 自带的 pg_regress 和 pg_isolation_regress 套件(分别包含 200 个回归测试和 117 个隔离测试),逐字节比较输出;此外还有 74 个 YAML 探针(55 个核心、19 个可选),用于覆盖上游套件无法表达的内容,如静默失败、运行时配置和 contrib 扩展行为。
postgres-compat 的测试通过标准是什么?核心失败和可选失败有什么区别?
每个测试被标记为 Core 或 Optional。只有 Core 测试失败才会导致整个运行失败;跳过的测试不算失败。Optional 测试失败不影响整体结果。此外,静默失败(语句返回成功但未生效)也算作失败。
postgres-compat 如何适配托管服务和厂商报告?
测试框架从不在目标上创建或删除数据库,并且将权限拒绝与功能缺失分开报告,以适应托管服务。厂商自行发布报告(report.yaml),任何人都可以复现,社区可以验证声明但不充当守门人。
postgres-compat 目前有哪些局限性?
目前仅支持单节点,因此 Riga 共识中需要第二个节点的部分(如双向逻辑复制、混合原生和厂商节点的集群)尚未覆盖,与 Patroni、repmgr 等工具的兼容性也未涉及。此外,项目尚未发布正式版本,且作者已将其暂时搁置。
postgres-compat 支持哪些 PostgreSQL 版本?采用什么许可证?
支持 PostgreSQL 14 到 18 版本,采用 PostgreSQL 许可证,代码仓库公开。
Riga 共识与 postgres-compat 是什么关系?
Riga 共识是 2025 年在里加 PGConf.EU 工作会议上产生的成果,它推动从单一的通过/失败认证转向细粒度的测试矩阵。postgres-compat 是 Riga 框架的参考实现,其探针目录结构直接对应 Riga 的三个领域分类。