0

コンテクスト

私はLionにpostgres9.1.4をインストールしたばかりで、PGデータベースに接続するための単純なクライアント(libpq)を作成したいと思います。

psql -lは、 postgresDBが所有するmydbという名前のデータベースがあることを示しています。

psql mydbによると:mydb =#

ここにmydbに接続しようとする小さなプログラムがあります:

// Server coordinates
const char * keywords[] = {"dbname", "user", NULL};
const char * values[] = {"mydb", "postgresDB", NULL};

// Check server state
analyse_PQpingParams (PQpingParams (keywords, values, 0));

// Connect to the database
PGconn * conn; 
conn = PQconnectdbParams (keywords, values, 0);

// Check if the connection is healthy
analyse_PQstatus (PQstatus (conn));

// Clean exit
PQfinish (conn);
exit (0);

問題

ここで、プログラムは何を返しますか:

analyse_PQpingParams says :
------
The server is running and appears to be accepting connections.
------

analyse_PQstatus says :
------
The state returned was NULL.
------

connオブジェクトがNULLなのはなぜですか?

ドキュメントの内容:

おそらくメモリが少なすぎてPGconnオブジェクトを割り当てられない場合を除いて、これらの関数は常にnull以外のオブジェクトポインタを返すことに注意してください。それがメモリの問題だった場合、psqlは私のデータベースに接続できなかったでしょう。したがって、ドキュメントはここでは役に立ちません。多分他の場所?

あなたの答えに感謝します!

ピエール。

analyse_PQステータスコード:

void analyse_PQstatus (int status) 
{
  cout << "\nanalyse_PQstatus says :" << endl;
  cout << "------" << endl;
  switch (status)
    {
    case CONNECTION_STARTED:
      cout << "Waiting for connection to be made." << endl;
      break;

    case CONNECTION_MADE:
      cout << "Connection OK; waiting to send." << endl;
      break;

    case CONNECTION_AWAITING_RESPONSE:
      cout << "Waiting for a response from the server." << endl;
      break;

    case CONNECTION_AUTH_OK:
      cout << "Received authentication; waiting for backend start-up to finish." << endl;
      break;

    case CONNECTION_SSL_STARTUP:
      cout << "Negotiating SSL encryption." << endl;
      break;

    case CONNECTION_SETENV:
      cout << "Negotiating environment-driven parameter settings." << endl;
      break;
    case 0 :
      cout << "The state returned was NULL" << endl;
      break;
    default :
      cout << "could not analyse this status code : " << status << endl;
    } 
    cout << "------\n" << endl;
} 
4

1 に答える 1

0

機能を見せてもらえますanalyse_PQstatusか?connそれがNULLであるか、またはPQstatus(conn)(関数に渡したもの)の結果が0であることが本当にわかりますCONNECTION_OKか?

于 2012-07-16T10:08:00.920 に答える