↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.4
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

34.3. 回归分析

回归测试的实际输出位于 ./results 目录中的文件里。测试脚本使用 diff 把每个输出文件与存储在 ./expected 目录中的参考输出进行比较。任何差异都会保存到 ./regression.diffs 中供你检查。(如果愿意,你也可以自己运行 diff。)

这些文件可能不会完全一致。测试脚本会把任何差异报告为"失败",但这种差异可能源于错误消息措辞、数学库行为等方面的细微跨系统差异。这类"失败"并不表示 Postgres 有问题。

因此,有必要检查每个"失败"测试的实际差异,以确定是否真的存在问题。下面几段试图为判断差异是否重要提供一些指导。

34.3.1. 错误消息差异

某些回归测试包含故意构造的非法输入值。错误消息可能来自 Postgres 代码,也可能来自宿主平台的系统例程。在后一种情况下,消息会因平台而异,但应反映相近的信息。这类消息差异会导致回归测试显示为"失败",但可以通过检查确认其有效性。

34.3.2. 日期和时间差异

大多数日期和时间结果依赖于时区环境。参考文件是为 PST8PDT 时区(加利福尼亚州伯克利)生成的,如果测试不以该时区设置运行,就会出现明显的失败。回归测试驱动程序会把环境变量 PGTZ 设置为 PST8PDT 以确保正确的结果。

如果你在夏令时切换日当天或其前一天或后一天运行测试,"timestamp" 测试中的一些查询会失败。这些查询假定昨天午夜、今天午夜和明天午夜之间的间隔正好是二十四小时……如果其间夏令时生效或失效,这就是错误的。

有些系统似乎不接受显式设置本地时区规则的推荐语法;在这类机器上你可能需要使用不同的 PGTZ 设置。

一些使用较老时区库的系统无法对 1970 年之前的日期应用夏令时修正,导致 1970 年前的 PDT 时间显示为 PST。这会导致测试结果中出现局部差异。

34.3.3. 浮点差异

某些测试涉及从表列计算 64 位(float8)数。已经观察到涉及 float8 列数学函数的结果存在差异。float8 和 geometry 测试尤其容易在不同平台之间出现微小差异。需要人工目测比较来确定这些差异的真实意义,它们通常出现在小数点右侧第 10 位。

某些系统发出 pow() 和 exp() 错误的方式与当前 Postgres 代码所预期的机制不同。

34.3.4. 多边形差异

若干测试涉及对加利福尼亚州奥克兰/伯克利街道地图地理数据的操作。地图数据被表示为多边形,其顶点用一对 float8 数(十进制纬度和经度)表示。首先创建一些表并装入地理数据,然后创建一些使用多边形相交操作符(##)连接两个表的视图,再对视图做一次 select。 在比较不同平台的结果时,差异出现在小数点右侧第 2 或第 3 位。出现这些问题的 SQL 语句是:

      QUERY: SELECT * from street;
          QUERY: SELECT * from iexit;
        

34.3.5. 随机差异

"random" 测试脚本中至少有一种情况旨在产生随机结果。这会使 random 回归测试偶尔(也许每五到十次尝试一次)失败。键入

      diff results/random.out expected/random.out
        

应当只产生一行或几行差异。除非随机测试在反复尝试中总是失败,否则不必担心。(另一方面,如果在回归测试的多次尝试中随机测试从未被报告失败,你可能确实应该担心。)

34.3.6. "expected" 文件

./expected/*.out 文件改编自 Jolly Chen 等人提供的原始整体式 expected.input 文件。在各种开发机器上生成的这些文件的新版本经过仔细(?)检查后被替换了进来。许多开发机器运行的是 Ix86 硬件上的某种 Unix 变体(FreeBSD、Linux 等)。 原始的 expected.input 文件是在一台 SPARC Solaris 2.4 系统上使用 postgres5-1.02a5.tar.gz 源树创建的。它与一台 I386 Solaris 2.4 系统上创建的文件比较后,差异仅在于浮点多边形小数点右侧第 3 位。 原始的 sample.regress.out 文件来自 Jolly Chen 构建的 postgres-1.01 发行版。它可能是在一台 DEC ALPHA 机器上创建的,因为 postgres-1.01 发行版中的 Makefile.global 有 PORTNAME=alpha。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。