为什么 PostgreSQL 的 SOCI 回归测试在 Windows 上失败?

Why SOCI regression tests for PostgreSQL fail on Windows?

我在 Windows 10 和 Visual Studio 2015 上构建和测试 SOCI 3.2,使用此批次:

SET PREFIX=..\soci-3.2.3-install
SET POSTGRES_DIR=E:\PostgreSQL.5

cmake^
 -G "NMake Makefiles"^
 -DCMAKE_BUILD_TYPE=Release^
 -DCMAKE_INSTALL_PREFIX=%PREFIX%^
 -DSOCI_TESTS=ON^
 -DWITH_ODBC=OFF^
 -DWITH_POSTGRESQL=ON^
 -DPOSTGRESQL_INCLUDE_DIR="%POSTGRES_DIR%\include"^
 -DPOSTGRESQL_LIBRARIES="%POSTGRES_DIR%\lib\libpq.lib"^
 -DSOCI_POSTGRESQL_TEST_CONNSTR="host=localhost port=5432 dbname=postgres user=eagui"^
 ..\soci-3.2.3

nmake
nmake test

为了避免VCheaders引起的宏重定义错误,我也在构建前注释了soci-3.2.3\core\soci-platform.h中的第27行。我确保将 E:\PostgreSQL.5\bin 添加到 PATH。命令提示符具有管理员权限。

在 运行 批处理之后,我从测试中得到以下输出:

...
3/4 Test #3: soci_postgresql_test .............***Failed    1.37 sec
    Start 4: soci_postgresql_test_static
4/4 Test #4: soci_postgresql_test_static ......***Failed    0.17 sec

50% tests passed, 2 tests failed out of 4

Total Test time (real) =   1.63 sec

The following tests FAILED:
          3 - soci_postgresql_test (Failed)
          4 - soci_postgresql_test_static (Failed)
Errors while running CTest
NMAKE : fatal error U1077: 'echo' : return code '0x8'
Stop.

我已将 PostgreSQL 服务器配置为接受信任连接。服务器中存在 postgres 数据库和 eagui 用户。

知道为什么 PostgreSQL 的测试没有通过以及如何修复它吗?

数据库中必须至少存在用户搜索路径中设置的模式之一。

默认情况下,搜索路径设置为查找以用户命名的模式。这当然可以更改,因此为了查看正在查找哪些模式,SHOW search_path; 命令可以是 运行。对于创建的任何新用户,搜索路径默认设置为 "$user", public.

在这种情况下,在连接字符串中指定了用户 eagui,但 postgres 数据库中不存在 eaguipublic 模式。创建这些模式之一可以使测试通过。