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 に接続してそのクエリを送信する方法がわからないことを推測しています。それが、質問の 2 番目の部分です。右?

その場合、QSqlDatabase言及したアクセサー関数は接続パラメーターの設定に使用されるため、「正しい」値は環境によって異なります。

上記のクエリを発行してデータベースを一覧表示する場合は、postgresデータベースが常に存在し、通常は特定の目的で使用されるのではなく、接続するためだけに存在するため、おそらくデータベースに接続する必要があります。それはあなたが電話することを意味しますsetDatabaseName("postgres");。テーブルは接続できるデータベースではないため、に渡すpg_databaseことsetDatabaseNameは無意味です。は、すべてのデータベースに存在する奇妙なテーブルの 1 つであり、混乱を招く可能性があります。pg_databasepg_catalog.pg_databasepg_database

他の 2 つのアクセサーを使用して、環境に適切なユーザー名とパスワードを指定しますpsql。どちらを使用すればよいかは、私にはわかりません。

パスワードを設定しても、認証が unix ソケット ID、信頼、またはその他の非パスワード スキームで行われるためにパスワードが不要な場合、パスワードは無視されることに注意してください。

これで質問がカバーされない場合は、編集して問題をより詳細に説明することを検討してください。何を試しましたか?期待どおりに機能しなかったことは何ですか? エラーメッセージ? Q版?

于 2012-09-05T00:11:54.153 に答える