pg_regress
是一个用于执行回归测试的实用程序。
pg_regress
在 PostgreSQL 7.1 中添加。
用法
pg_regress
通常通过运行回归测试时的 PostgreSQL Makefile 间接执行。
pg_regress
旨在用于测试,不会安装到构建目标目录中。它通常也不包含在 PostgreSQL 软件包中。
环境变量
以下环境变量可以设置为影响 pg_regress
的行为;尤其是在通过 Makefile 间接调用它时
PG_REGRESS_DIFF_OPTS
PG_REGRESS_SOCK_DIR
PG_HOST
PG_PORT
INITDB_TEMPLATE
PGCTLTIMEOUT
COMSPEC
(仅限 Windows)PG_TEST_INITDB_EXTRA_OPTS
(PostgreSQL 17 及更高版本)PG_TEST_USE_UNIX_SOCKETS
(仅限 Windows)
源代码
pg_regress
源代码包含在以下文件中
更改历史记录
- PostgreSQL 17
- PostgreSQL 16
- 输出现在符合 TAP 规范(提交 558fff0a)
- PostgreSQL 13
- 选项
--load-language
已移除(提交 751c63ce)
- 选项
- PostgreSQL 9.6
- 允许使用多个
--temp-config
选项(提交 26fdff1b)
- 允许使用多个
- PostgreSQL 9.3
- PostgreSQL 9.1
- 选项
--multibyte
重命名为--encoding
(提交 f536d419)
- 选项
- PostgreSQL 8.4
pg_regress
可以从构建树之外执行(提交 feae7856)
- PostgreSQL 8.2
- 从 shell 脚本转换为 C(提交 a38c85bd)
- PostgreSQL 8.1
- PostgreSQL 7.1
- 添加(提交 6f64c2e5)
示例
为了演示 pg_regress
的用法,请考虑一个包含以下定义单个测试的文件的目录
$ find . . ./sql ./sql/testdemo.sql ./expected ./expected/testdemo.out $ cat sql/testdemo.sql SELECT 'Hello cheese'; $ cat expected/testdemo.out SELECT 'Hello world'; ?column? ------------- Hello world (1 row)
出于演示目的,输入文件(sql/testdemo.sql
)已创建,以便其实际输出与预期输出不匹配。
pg_regress
可以这样执行
$ ~/devel/postgresql/src/test/regress/pg_regress \ --bindir=/usr/local/pgsql/bin \ --temp-instance=/tmp/regress \ testdemo # initializing database system by running initdb # using temp instance on port 55312 with PID 3704855 not ok 1 - testdemo 11 ms 1..1 # 1 of 1 tests failed. # The differences that caused some tests to fail can be viewed in the file "/var/lib/pgsql/regress_test/regression.diffs". # A copy of the test summary that you see above is saved in the file "/var/lib/pgsql/regress_test/regression.out".
该目录现在将包含 pg_regress
执行运行的各种输出
$ find . . ./results ./results/testdemo.out ./regression.diffs ./sql ./sql/testdemo.sql ./regression.out ./expected ./expected/testdemo.out ./log ./log/initdb.log ./log/postmaster.log
文件 results/testdemo.out
包含执行 sql/testdemo.sql
的实际结果,而 regression.diffs
包含 expected/testdemo.out 和 results/testdemo.out
之间的差异
diff -U3 /var/lib/pgsql/regress_test/expected/test.out /var/lib/pgsql/regress_test/results/test.out --- /var/lib/pgsql/regress_test/expected/test.out 2024-02-06 14:31:33.388790384 +0900 +++ /var/lib/pgsql/regress_test/results/test.out 2024-02-06 14:49:34.742656685 +0900 @@ -1,6 +1,6 @@ -SELECT 'Hello world'; - ?column? -------------- - Hello world +SELECT 'Hello cheese'; + ?column? +-------------- + Hello cheese (1 row)
参考
- PostgreSQL 文档: 运行测试