有人可以解释如何使用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?
非常感谢。提前谢谢。
答案 0 :(得分:2)
您似乎已经回答了问题的第一部分。连接到postgres或template1数据库并发出上面引用的查询以获取数据库列表。我猜 - 在行之间阅读 - 你不知道如何连接到PostgreSQL来发送该查询,这就是你的问题的第二部分。正确?
如果是这样,您提到的QSqlDatabase
访问者函数用于设置连接参数,因此“正确”值取决于您的环境。
如果你想发出上面的查询 - 列出数据库 - 那么你可能想要连接到postgres
数据库,因为它始终存在,并且通常不用于任何特定的数据库,它就在那里连接到。这意味着你打电话给setDatabaseName("postgres");
。将pg_database
传递给setDatabaseName
将是荒谬的,因为pg_database
是pg_catalog.pg_database
表,它不是您可以连接的数据库。 pg_database
是每个数据库中存在的奇怪表格之一,这可能会使您感到困惑。
使用其他两个访问者为您的环境指定适当的用户名和密码,与psql
使用的用户名和密码相同;我无法告诉你使用哪些。
请注意,如果您设置了密码,但由于通过unix socket ident,trust或其他非密码方案进行身份验证,则不需要密码,密码将被忽略。
如果这不能解决您的问题,请考虑对其进行编辑并更详细地解释您的问题。你试过什么?什么没有效果你的期望?错误消息? Qt版本?