回归测试的判定原理是将测试脚本的实际终端输出(存放在 src/test/regress/results/ 目录下),与官方标准参考输出(存放在 src/test/regress/expected/ 目录下)通过 diff 工具进行逐行文本比对。比对产生的差异会被完整保存在 src/test/regress/regression.diffs 中。
在某些异构软硬件平台上,即便是完全正常安装且功能完备的系统,也可能会因微小的底层系统差异导致部分测试项报告“失败”。在遇到失败时,应当仔细核验 diff 差异报告,常见的良性微小差异包括:
错误消息差异:特定系统底层抛出的操作系统错误提示文本可能在不同平台间存在措辞差异。
区域语言环境差异:非 C 语言环境下的文本排序权重可能导致输出行顺序微调。
浮点数计算精度差异:不同 CPU 硬件架构或特定编译器优化选项下,双精度浮点数在小数点后十余位的极微小舍入误差,或者将负零显示为 -0 还是 0。
行排序差异:在未显式指定 ORDER BY 的查询中,返回行的物理次序可能因底层并行扫描分配而存在差异。
操作系统语言区域设置或第三方库版本不同可能导致报错信息字符串存在细微差异。
不同操作系统的 Collation 算法可能导致字符排序输出顺序略有不同。
系统时区定义数据库或夏令时规则演进可能导致日期时间表示出现差异。
底层 CPU 架构与 C 运行库的浮点数舍入精度差异可能引起末位微小偏差。
在未显式声明 ORDER BY 的查询中,数据行的物理返回顺序依赖于执行计划,计划不同会导致行顺序改变,这并非缺陷。
操作系统的最大栈深度配额差异可能导致递归深度测试提前终止报错。
涉及伪随机生成器的测试用例在不同硬件平台上可能产出不同的数值。
不同的基础配置参数(如内存大小)可能影响代价预估并改变计划。