trying to connect to PostgreSQL

Поиск
Список
Период
Сортировка
От kvnsmnsn@cs.byu.edu
Тема trying to connect to PostgreSQL
Дата
Msg-id 41075.67.137.192.66.1176233755.squirrel@mail.cs.byu.edu
обсуждение исходный текст
Ответы Re: trying to connect to PostgreSQL
Список pgsql-novice
I'm a relative newcomer to PostgreSQL.  I read the page on its website
that explained how to connect, and I tried to compile the following
example program.  I located a "libpq-fe.h" at "/usr/include/pgsql" so
I executed the command:

     cc -o pgsConnect -I/usr/include/pgsql pgsConnect.c

I got a whole bunch of error messages listing a whole bunches of oc-
currences of an "undefined reference to" some C function.  I went
through my local copy of "libpq-fe.h" and found references to each of
those functions, but they were all declared "extern".  Do I have to
actually have those functions defined somewhere in order to get this
code to compile?  If so, how can I get them defined?

The offending references were:

PQstatus          PQerrorMessage    PQexec            PQresultStatus
PQclear           PQnfields         PQfname           PQgetvalue
PQntuples         PQfinish

And the code I used was:

/*
 * testlibpq.c
 *
 *      Test the C version of libpq, the PostgreSQL frontend library.
 */
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"

static void
exit_nicely(PGconn *conn)
{
  PQfinish(conn);
  exit(1);
}

int
main(int argc, char **argv)
{
  const char *conninfo;
  PGconn     *conn;
  PGresult   *res;
  int         nFields;
  int         i,
              j;

  /*
   * If the user supplies a parameter on the command line, use it as the
   * conninfo string; otherwise default to setting dbname=postgres and using
   * environment variables or defaults for all other connection parameters.
   */
  if (argc > 1)
    conninfo = argv[1];
  else
    conninfo = "dbname = postgres";

  /* Make a connection to the database */
  conn = PQconnectdb(conninfo);

  /* Check to see that the backend connection was successfully made */
  if (PQstatus(conn) != CONNECTION_OK)
  {
    fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
    exit_nicely(conn);
  }

  /*
   * Our test case here involves using a cursor, for which we must be inside
   * a transaction block.  We could do the whole thing with a single
   * PQexec() of "select * from pg_database", but that's too trivial to make
   * a good example.
   */

  /* Start a transaction block */
  res = PQexec(conn, "BEGIN");
  if (PQresultStatus(res) != PGRES_COMMAND_OK)
  {
    fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
  }

  /*
   * Should PQclear PGresult whenever it is no longer needed to avoid memory
   * leaks
   */
  PQclear(res);

  /*
   * Fetch rows from pg_database, the system catalog of databases
   */
  res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from
pg_database");
  if (PQresultStatus(res) != PGRES_COMMAND_OK)
  {
    fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
  }
  PQclear(res);

  res = PQexec(conn, "FETCH ALL in myportal");
  if (PQresultStatus(res) != PGRES_TUPLES_OK)
  {
    fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
  }

  /* first, print out the attribute names */
  nFields = PQnfields(res);
  for (i = 0; i < nFields; i++)
  { printf("%-15s", PQfname(res, i));
  }
  printf("\n\n");

  /* next, print out the rows */
  for (i = 0; i < PQntuples(res); i++)
  {
    for (j = 0; j < nFields; j++)
    { printf("%-15s", PQgetvalue(res, i, j));
    }
    printf("\n");
  }

  PQclear(res);

  /* close the portal ... we don't bother to check for errors ... */
  res = PQexec(conn, "CLOSE myportal");
  PQclear(res);

  /* end the transaction */
  res = PQexec(conn, "END");
  PQclear(res);

  /* close the connection to the database and cleanup */
  PQfinish(conn);

  return 0;
}

                                ---Kevin Simonson

"You'll never get to heaven, or even to LA,
if you don't believe there's a way."
from _Why Not_


В списке pgsql-novice по дате отправления:

Предыдущее
От: Andreas
Дата:
Сообщение: server variables ?
Следующее
От: "Phillip Smith"
Дата:
Сообщение: Re: trying to connect to PostgreSQL