我通过postgres数据库安装了postgresql。 Postgresql 版本 12.17。 然后,我创建了新的数据库:
myendb
。
我正在使用 libpq。
我尝试通过以下连接字符串并使用
myendb
函数来连接 PQconnectdb()
:
host=localhost port=54312 user=postgres password= dbname=myendb
用户密码为空。
然后我执行了以下命令:
SELECT current_database();
libpq 给了我以下结果:
postgres
这是错误的,因为我已经连接到
myendb
数据库。
你知道为什么吗?但我已连接到
myendb
数据库。
在我使用
PQsetdbLogin()
而不是 PQconnectdb()
后,libpq 连接到我期望的 myendb
。
为什么 PQsetdbLogin 和 PQconnectdb 有一些差异?
文档说:
它具有相同的功能,除了缺少的参数将 始终采用默认值。
您已将密码设置为“dbname=myendb”,并且未将数据库名称设置为任何内容,因此它默认为“postgres”。如果您不想设置密码,请不要在连接字符串中提及它。 (或者,按照您链接的文档进行操作:“要写入空值......用单引号将其引起来”)
您不能简单地使用 PQsetdbLogin() 代替 PQconnectdb(),因为它们具有不同的签名。您必须解析出字符串才能获取各个参数,这与 PostgreSQL 的做法不同。