Обсуждение: Checking PQstatus (libpq) returns CONNECTION_OK when it is not.

Поиск
Список
Период
Сортировка

Checking PQstatus (libpq) returns CONNECTION_OK when it is not.

От
pgsql-bugs@postgresql.org
Дата:
Philip (philip.howell@cit.act.edu.au) reports a bug with a severity of 2
The lower the number the more severe it is.

Short Description
Checking PQstatus (libpq) returns CONNECTION_OK when it is not.

Long Description
Hi
I'm having problems with the PQstatus function in the libpq library.  It returns CONNECTION_OK when I know that it is
not. I used the test program attached bellow and the following method to test it: 

1. I compiled the program:

    gcc -Wall -o test test.c -lpq

2. With the postgreSQL server (161.50.16.173) up and running I executed the test program:

    ./test

3. I hit <return> a few times to get the following output

>Connection status... OK
>
>Connection status... OK
>
>Connection status... OK
>
>Connection status... OK

4. I then sutdown the network service on the postgreSQL server, to break the connection

5. However when I hit <return> I still get

>Connection status... OK

When I would expect:

>Connection status... BAD

The call to PQstatus(conn) on line 16 of the attached code never returns CONNECTION_BAD.

SYSTEM INFORMATION:
===================

postgreSQL Server:
Hardware: i386
OS Linux RedHat 6.2
Postgres was installed from RPMs version 7.0.3-2

Client Machine
Hardware: i386
OS: Linux RedHat 6.2
RPMs installed:
     postgresql-devel-7.0.3-2
     postgresql-7.0.3-2

Regards
Phil


Sample Code
#include <stdlib.h>
#include <stdio.h>
#include "pgsql/libpq-fe.h"

PGconn *make_conn();

int main (int argc, char *argv[])
{
    PGconn      *conn;

    conn = make_conn();

    while (fgetc(stdin) != 'q')
    {
        printf("Connection status... ");
        if (PQstatus(conn) != CONNECTION_OK) {
            printf("BAD\n");
            PQreset(conn);
        } else {
            printf("OK\n");
        }

    }
    return(0);
}

PGconn *make_conn()
{
    PGconn      *conn;

    conn = PQconnectdb("hostaddr = 161.50.16.173 dbname = squid user = squid password = squid");
    if (PQstatus(conn) == CONNECTION_BAD)
    {
        fprintf(stderr,"Failed to connect to database\n");
        fprintf(stderr,"%s\n",PQerrorMessage(conn));
        PQfinish(conn);
        exit(1);
    }
    return(conn);
}


No file was uploaded with this report