ページの先頭行へ戻る
HA Database Ready 業務開発ガイド(Open SQL編)
FUJITSU Integrated System

4.2.4 C言語用ライブラリを利用する場合

以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。

アプリケーションの記述例
    PGconn     *conn;
    PGresult   *res;
    …

    res = PQexec(conn, "~");
    if (PQresultStatus(res) != PGRES_COMMAND_OK) /* (注) */
    {
        if (PQresultErrorField(res, PG_DIAG_SQLSTATE) == NULL ||
            strcmp(PQresultErrorField(res, PG_DIAG_SQLSTATE),"57P01") == 0)
        {
            PQclear(res);
            /* 再接続処理へ */

        }
        else 
        {
            PQclear(res);
            /* その他のエラー */
        }
    }

注)実行するSQL文により、PGRES_COMMAND_OK(データを返さないSQL文の場合) と、 PGRES_TUPLES_OK(データを返すSQL文の場合)を使い分けます。

注意

データベースの切り替えが完了するまでは、コネクションの接続がエラー終了します。PQstatus()はCONNECTION_BADを返却します。

アプリケーションの記述例

5秒間隔で20回、再接続をリトライする場合。

    PGconn     *conn;
    int count = 0;

    do{
        count++;
        PQreset(conn);
        if (PQstatus(conn) != CONNECTION_OK)
        {
            if (count < 20){
#if defined(WIN32)
                Sleep(5000);
#else
                sleep(5);
#endif
            }else{
                /* 再接続失敗 */
            }
        }else{
            /* 再接続完了 */
        }
    }while(1);