为什么我在使用 Postgresql 和 PQconnectdb 时会错误地连接到另一个数据库?

问题描述 投票:0回答:1

我通过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 有一些差异?

文档说:

它具有相同的功能,除了缺少的参数将 始终采用默认值。

https://www.postgresql.org/docs/8.1/libpq.html

postgresql pg libpq
1个回答
2
投票

您已将密码设置为“dbname=myendb”,并且未将数据库名称设置为任何内容,因此它默认为“postgres”。如果您不想设置密码,请不要在连接字符串中提及它。 (或者,按照您链接的文档进行操作:“要写入空值......用单引号将其引起来”)

您不能简单地使用 PQsetdbLogin() 代替 PQconnectdb(),因为它们具有不同的签名。您必须解析出字符串才能获取各个参数,这与 PostgreSQL 的做法不同。

© www.soinside.com 2019 - 2024. All rights reserved.