2012-09-04 53 views
2

有人可以請解釋一下如何獲得PostgreSQL服務器上所有現有數據庫的列表,用戶已經可以使用Qt訪問該列表? PostgreSQL文檔提出了以下查詢:Qt - 如何使用Qt接口在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

您似乎已經回答了問題的第一部分。連接到'postgres'或'template1'數據庫併發出上面引用的查詢來獲取數據庫列表。 –

回答

2

您似乎已經回答了您的問題的第一部分。連接到postgres或template1數據庫併發出上面引用的查詢以獲取數據庫列表。我猜 - 在各行之間閱讀 - 你不知道如何連接到PostgreSQL發送該查詢,這就是你的問題的第二部分。對?

如果是這樣,您提到的QSqlDatabase訪問器函數用於設置連接參數,因此「正確」值取決於您的環境。

如果你想發出上面的查詢 - 列出數據庫 - 那麼你可能想連接到postgres數據庫,因爲它一直存在,並且通常不用於任何特定的事情,它只是在那裏連接。這意味着你可以撥打setDatabaseName("postgres");。通過pg_databasesetDatabaseName將是無意義的,因爲pg_databasepg_catalog.pg_database表,它不是您可以連接到的數據庫。 pg_database是存在於每個數據庫中的奇數表之一,這可能是你困惑的原因。

隨着其他兩個訪問器爲您的環境指定適當的用戶名和密碼,與您用於psql的相同;我不可能告訴你使用哪種方法。

請注意,如果您設置了密碼,但不需要一個密碼,因爲身份驗證是通過unix套接字標識,信任或其他非密碼方案完成的,則密碼將被忽略。

如果這不包括您的問題,請考慮編輯它並更詳細地解釋您的問題。你試過了什麼?什麼不符合你的預期?錯誤訊息? Qt版本?

+0

我對PostgreSQL不熟悉,但我能夠連接。我只是得到一個空的結果集。我不確定問題是什麼,但我會繼續調查。至少我知道我在正確的軌道上。謝謝你的徹底迴應。 – CSLover

+0

@ user1157168首先想到:在'pg_catalog.pg_database'之前的'search_path'上可能有一個用戶定義的表,也叫做'pg_database'。不太可能,但是誰知道。因爲'postgres'數據庫沒有列爲模板數據庫,所以您不應該在普通設置中運行該查詢來獲取空結果集。 –

+0

現在按預期工作。爲了澄清,根本沒有必要連接到特定的數據庫,所以調用QSqlDatabase :: setDatabaseName()根本就沒有必要。感謝您的幫助。 – CSLover

相關問題