3

有人可以解释如何使用 Qt 获取用户已经有权访问的 PostgreSQL 服务器上所有现有数据库的列表吗?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?

非常感激。先感谢您。

4

1 回答 1

2

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

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

如果您想发出上面的查询 - 列出数据库 - 那么您可能希望连接到postgres数据库,因为它始终存在并且通常不用于任何特定的事情,它只是为了连接到那里。这意味着你会打电话给setDatabaseName("postgres");. 传递pg_databasesetDatabaseName将是荒谬的,因为pg_databasepg_catalog.pg_database表,它不是您可以连接的数据库。pg_database是每个数据库中都存在的那些奇怪的表之一,这可能会让您感到困惑。

使用其他两个访问器为您的环境指定适当的用户名和密码,就像您用于psql; 我不可能告诉你使用哪些。

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

如果这不能涵盖您的问题,请考虑对其进行编辑并更详细地解释您的问题。你试过什么?什么没有按您的预期工作?错误信息?Qt版本?

于 2012-09-05T00:11:54.153 回答