本页目录

PostgreSQL/GaussDB测试

用户SQL校验数据不一致

用户可以加no_result或者has_result这样的SQL hint来检查数据不一致。如果发生了不一致,就coredump。

代码插桩

在 PostgreSQL 17 之前,内核主干没有像 TiDB 或 MongoDB 那样的通用 Failpoint 机制。 PG 社区长期以来保持着极度保守和简约的设计哲学:

  • 维护成本与代码污染:社区认为在生产内核代码中散落大量的 INJECTION_POINT(“name”) 会降低核心代码的可读性,且可能带入额外的运行时开销或死锁隐患。
  • 倾向于常规隔离:PG 官方更喜欢通过锁机制、isolation_tester(利用锁等待控制并发)或者通过修改 GUC 参数控制特定逻辑分支来做测试。

PostgreSQL 17后, 社区为了更好地测试极端并发、WAL 重放、SLRU 缓存以及逻辑复制(Logical Replication)等微秒级的 Race Condition,最终打破了传统!1

Footnotes

  1. https://www.postgresql.org/message-id/flat/ZTiV8tn_MIb_H2rE@paquier.xyz