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

Why SOCI regression tests for PostgreSQL fail on Windows?

本文关键字:Windows 失败 回归测试 PostgreSQL SOCI 为什么      更新时间:2023-10-16

我使用Visual Studio 2015在Windows 10上构建和测试SOCI 3.2,使用以下批处理:

SET PREFIX=..soci-3.2.3-install
SET POSTGRES_DIR=E:PostgreSQL9.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%liblibpq.lib"^
 -DSOCI_POSTGRESQL_TEST_CONNSTR="host=localhost port=5432 dbname=postgres user=eagui"^
 ..soci-3.2.3
nmake
nmake test

我还在构建之前注释soci-3.2.3coresoci-platform.h中的第27行,以避免由VC头之一引起的宏重定义错误。我确保E:PostgreSQL9.5bin被加到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模式。创建其中一个模式可以使测试通过。