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

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

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

34.4. 回归分析

“失败”的测试可能是由于错误消息、数学库或输出格式的细微差异而失败。这类"失败"并不表示 Postgres 有问题。

对于 i686/Linux-ELF 平台,没有测试失败,因为它是 v6.2.1 回归测试的参考平台。

对于 SPARC/Linux-ELF 平台,使用 Postgres v6.2 的 970525 beta 版时下列测试"失败": float8 和 geometry 因浮点数的微小精度差异而"失败"。select_views 产生大量不同的输出,但差异源于微小的浮点差异。

结论是什么?如果你确实看到失败,请设法理解这些差异的本质,然后判断这些差异是否会影响你对 Postgres 的预期使用。不过请记住,这很可能是迄今为止最坚实的 Postgres 发行版,它合并了来自 v6.1 的许多缺陷修复,而且先前版本的 Postgres 已经成功使用了一段时间。

34.4.1. 比较期望/实际输出

结果位于 ./results 目录中的文件里。这些结果可以用 'diff' 与 ./expected 目录中的结果进行比较。这些文件可能不会完全一致。下面几段试图解释这些差异。

34.4.2. 错误消息差异

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

34.4.3. OID 差异

PostgreSQL OID(对象标识符)出现在 'regress.out' 中的若干地方。OID 是唯一的 32 位整数,由 PostgreSQL 后端在每次插入或更新表行时生成。如果你在一个非全新的数据库上运行回归测试,或者多次运行它,报告的 OID 将具有不同的值。 'misc.out' 中的下列 SQL 语句表现出了这种行为: QUERY: SELECT user_relns() AS user_relns ORDER BY user_relns; 'a,523676' 行就是由一个 OID 组成的。

34.4.4. 日期和时间差异

在许多受支持的平台上,你可以让 PostgreSQL 认为自己运行在与加利福尼亚州伯克利相同的时区中。详见关于如何运行回归测试的那一节。 如果你不把时区环境显式设置为 PST8PDT,那么大多数日期和时间结果将反映你的本地时区,并且无法通过回归测试。 有些系统似乎不接受显式设置本地时区规则的推荐语法。某些使用公共域时区包的系统在 1970 年前的 PDT 时间上表现出小问题,把它们表示为 PST。

34.4.5. 浮点差异

某些测试涉及从表列计算 64 位(float8)数。已经观察到涉及 float8 列数学函数的结果存在差异。这些差异出现在同一平台上使用不同操作系统的情况,即 Intel/86 上的 BSDI 和 SOLARIS;以及同一操作系统用于不同平台的情况,即 SPARC 和 Intel/86 上的 SOLARIS。 需要人工目测比较来确定这些差异的真实意义,它们通常出现在小数点右侧第 10 位。 某些系统发出 pow() 和 exp() 错误的方式与当前 Postgres 代码所预期的机制不同。

34.4.6. 多边形差异

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

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

34.4.7. 随机差异

random.out 中至少有一个测试用例旨在产生随机结果。这会使 random 回归测试失败。键入

    diff results/random.out expected/random.out

因此应当只产生一行或几行差异,但不同体系结构上的其他浮点差异可能造成多得多的差异。见下面的发行说明。

34.4.8. “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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。