0

Sociのもう1つの問題...作成したばかりのtestDBに接続したいのですが、以下のコードは致命的なエラーを示しています。

これは私がしました:

PostgreSQLの場合:

1) CREATE USER robert WITH ENCRYPTED PASSWORD 'pass'; 
2) CREATE DATABASE testDB; 
3) GRANT ALL PRIVILEGES ON DATABASE testDB TO robert;

私のC++コード:

#include <iostream>
#include <soci.h>
#include <string>
using std::string;
using std::cout;
#include <postgresql/soci-postgresql.h>
 
bool connectToDatabase(string databaseName, string user, string password)
{
        try
   { 
      soci::session sql(soci::postgresql, "dbname=" +databaseName + " user="+user + " password="+password);
   }
   catch (soci::postgresql_soci_error const & e)
   {
      std::cerr << "PostgreSQL error: " << e.sqlstate() << " " << e.what() << std::endl;
        return false;        
   }
   catch (std::exception const & e)
   {
      std::cerr << "Some other error: " << e.what() << std::endl;
        return false;   
        }
        return true;
}
 
int main(int argc, char **argv)
{
   cout << connectToDatabase("testDB", "robert", "pass"); 
 
   return 0;
 
}

コンパイル後、私はこれを手に入れました:

Some other error: Cannot establish connection to the database.
FATAL:  database "testDB" does not exist

どうしたの?

4

1 に答える 1

1

代わりにデータベース「testdb」に接続してください。

PostgreSQLの大文字小文字の区別は、引用符で囲まれていない識別子を小文字に変換することで機能します。したがってCREATE DATABASE testDB、とは対照的に、「testdb」というデータベースを作成しますCREATE DATABASE "testDB"

(一般的なアドバイスとして、すべて小文字の識別子を使用することに慣れるか、単語の間にアンダースコアを付けるか、常に識別子を引用することに慣れてください。前者はPostgreSQLにとってより自然であり、後者を使用すると、それにもかかわらずコンベンション)。

于 2012-07-12T17:10:27.470 に答える