test.c

text/plain

Filename: test.c
Type: text/plain
Part: 0
Message: libpq async duplicate error results
#include <stdio.h>
#include <libpq-fe.h>

static void
run_query(PGconn *conn, const char *command)
{
	int rc;
	PGresult *res;
	int count = 0;

	fprintf(stderr, "command = %s\n", command);
	rc = PQsendQuery(conn, command);
	if (rc != 1)
	{
		char *error = PQerrorMessage(conn);

		fprintf(stderr, "PQsendQuery() error: %s", error);
		return;
	}

	while ((res = PQgetResult(conn)))
	{
		ExecStatusType status;

		status = PQresultStatus(res);
		fprintf(stderr, "result %d status = %s\n", ++count, PQresStatus(status));
		fprintf(stderr, "error message = \"%s\"\n", PQresultErrorMessage(res));
		PQclear(res);
	}

	fprintf(stderr, "\n");
	return;
}

int
main()
{
	PGconn *conn;

	conn = PQconnectdb("");
	if (PQstatus(conn) != CONNECTION_OK)
	{
		fprintf(stderr, "Connection to database failed: %s\n",
			PQerrorMessage(conn));
		return 1;
	}

	run_query(conn, "SELECT 'before';");
	run_query(conn, "SELECT pg_terminate_backend(pg_backend_pid());");
	run_query(conn, "SELECT 'after';");

	PQfinish(conn);
	return 0;
}