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

mum43rcc  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(52)

我通过postgres数据库安装了postgresql。Postgresql版本12.17。然后,我创建了新的数据库:myendb
我使用libpq。
我尝试通过以下连接字符串和使用PQconnectdb()函数连接myendb

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

pvcm50d1

pvcm50d11#

您已经将密码设置为'dbname= myendb',并且还没有将dbname设置为任何值,因此它默认为'postgres'。如果您不想设置密码,请不要在连接字符串中提及它。(或者,按照您链接的文档中的说法:“要写入空值......用单引号将其括起来”)
你不能简单地使用PQsetdbLogin()而不是PQconnectdb(),因为它们有不同的签名。你必须解析出字符串以获取单个参数,这与PostgreSQL的方式不同。

相关问题