Qt-如何使用Qt接口列出PostgreSQL server上的所有现有数据库

Qt-如何使用Qt接口列出PostgreSQL server上的所有现有数据库,qt,postgresql,Qt,Postgresql,有人能解释一下如何使用Qt获取用户已经有权访问的PostgreSQL server上所有现有数据库的列表吗?PostgreSQL文档建议进行以下查询: SELECT datname FROM pg_database WHERE datistemplate = false; 以下功能的正确参数是什么: QSqlDatabase::setDatabaseName(const QString & name) //"postgres" or "pg_database"? QSqlDatabas

有人能解释一下如何使用Qt获取用户已经有权访问的PostgreSQL server上所有现有数据库的列表吗?PostgreSQL文档建议进行以下查询:

SELECT datname FROM pg_database WHERE datistemplate = false;
以下功能的正确参数是什么:

QSqlDatabase::setDatabaseName(const QString & name) //"postgres" or "pg_database"?
QSqlDatabase::setUserName(const QString & name) //actual user name?
QSqlDatabase::setPassword(const QString & password) //no password? or user password?

非常感谢。提前谢谢。

您似乎已经回答了问题的第一部分。连接到postgres或template1数据库,并发出上面引用的查询以获取数据库列表。我猜——从字里行间看——您不知道如何连接到PostgreSQL来发送该查询,这就是您问题的第二部分。对吧?

如果是这样,您提到的
QSqlDatabase
访问器函数用于设置连接参数,因此“正确”值取决于您的环境

如果您想发出上面的查询-列出数据库-那么您可能想连接到
postgres
数据库,因为它总是存在的,通常不用于任何特定的内容,它只是用来连接的。这意味着您将调用
setDatabaseName(“postgres”)。将
pg_数据库
传递到
setDatabaseName
是毫无意义的,因为
pg_数据库
pg_目录。pg_数据库
表,它不是您可以连接的数据库
pg_数据库
是存在于每个数据库中的奇怪表之一,这可能会让您感到困惑

对于其他两个访问器,为您的环境指定适当的用户名和密码,与您在
psql
中使用的用户名和密码相同;我没办法告诉你该用哪个

请注意,如果您设置了密码,但由于身份验证是通过unix套接字标识、信任或其他非密码方案完成的,因此不需要设置密码,则密码将被忽略


如果这不包括你的问题,请考虑编辑它并更详细地解释你的问题。你试过什么?什么东西没有按你的预期工作?错误消息?Qt版本?

您似乎已经回答了问题的第一部分。连接到
postgres
template1
数据库,并发出上面引用的查询以获取数据库列表。我不熟悉PostgreSQL,但我能够连接。我只是得到一个空的结果集。我不确定问题出在哪里,但我会继续调查。至少我知道我在正确的轨道上。感谢您的全面回复。@user1157168首先想到:可能有一个用户定义的表,也被命名为
pg\u数据库
,它位于
pg\u目录.pg\u数据库
之前的
search\u路径
。不太可能,但谁知道呢。在正常设置下运行该查询时不应该得到空的结果集,因为
postgres
数据库未作为模板数据库列出。它现在可以正常工作。为了澄清这一点,根本不需要连接到特定的数据库,因此根本不需要调用QSqlDatabase::setDatabaseName()。再次感谢您的帮助。@user1157168那么,您可能想向Qt人员提及这一点,因为这与PostgreSQL的正常工作方式背道而驰-如果不连接到数据库,甚至是列表数据库,您无法使用PostgreSQL做任何事。如果未指定任何数据库或其他内容,则它们必须假定
postgres
为数据库。