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

时间:2012-09-04 23:56:36

标签: qt postgresql

有人可以解释如何使用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?

非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

使用其他两个访问者为您的环境指定适当的用户名和密码,与psql使用的用户名和密码相同;我无法告诉你使用哪些。

请注意,如果您设置了密码,但由于通过unix socket ident,trust或其他非密码方案进行身份验证,则不需要密码,密码将被忽略。

如果这不能解决您的问题,请考虑对其进行编辑并更详细地解释您的问题。你试过什么?什么没有效果你的期望?错误消息? Qt版本?