zoukankan      html  css  js  c++  java
  • libpq程序例子

    程序:

    [root@lex tst]# cat testlibpq.c
    /*
     * testlibpq.c
     *  Test the C version of LIBPQ, the POSTGRES frontend library.
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include "libpq-fe.h"
    
    static void
    exit_nicely(PGconn *conn)
    {
     PQfinish(conn);
     exit(EXIT_SUCCESS);
    }
    
    int
    main()
    {
     char    *pghost,
             *pgport,
             *pgoptions,
             *pgtty;
     char    *dbName;
     int   nFields;
     int   i,
           j;
    
    #ifdef DEBUG
     FILE    *debug;
    #endif  /* DEBUG */
    
     PGconn    *conn;
     PGresult   *res;
    
     /*
      * Begin by setting the parameters for a backend connection.
      * If the parameters are NULL, the system tries to use 
      * reasonable defaults by looking up environment variables 
      * or, failing that, using hardwired constants.
      */
    
     const char *conninfo="postgresql://postgres:postgres@localhost:5432/postgres";
    
     /* make a connection to the database */
     //conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
     conn = PQconnectdb(conninfo);
    
     /* check to see that the backend connection was successfully made */
     if (PQstatus(conn) == CONNECTION_BAD)
     {
      fprintf(stderr, "Connection to database '%s' failed.
    ", dbName);
      fprintf(stderr, "%s", PQerrorMessage(conn));
      exit_nicely(conn);
     }
    
    #ifdef DEBUG
     debug = fopen("/tmp/trace.out", "w");
     PQtrace(conn, debug);
    #endif  /* DEBUG */
    
     /* start a transaction block */
     res = PQexec(conn, "BEGIN");
     if (PQresultStatus(res) != PGRES_COMMAND_OK)
     {
      fprintf(stderr, "BEGIN command failed
    ");
      PQclear(res);
      exit_nicely(conn);
     }
    
     /*
      * should PQclear PGresult whenever it is no longer needed 
      * so as to avoid memory leaks
      */
     PQclear(res);
    
     /*
      * fetch instances from the 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 command failed
    ");
      PQclear(res);
      exit_nicely(conn);
     }
     PQclear(res);
    
     res = PQexec(conn, "FETCH ALL in myportal");
     if (PQresultStatus(res) != PGRES_TUPLES_OK)
     {
      fprintf(stderr, "FETCH ALL command didn't return tuples properly
    ");
      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("
    
    ");
    
     /* next, print out the instances */
     for (i = 0; i < PQntuples(res); i++)
     {
      for (j = 0; j < nFields; j++)
       printf("%-15s", PQgetvalue(res, i, j));
      printf("
    ");
     }
    
     PQclear(res);
    
     /* close the portal */
     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);
    
    #ifdef DEBUG
     fclose(debug);
    #endif  /* DEBUG */
    
     return 0;
    }
    [root@lex tst]# 

    编译和运行:

    export LD_LIBRARY_PATH=/usr/local/pgsql/lib
    [root@lex tst]# gcc -c -I/usr/local/pgsql/include testlibpq.c
    [root@lex tst]# gcc -o testlibpq testlibpq.o -L/usr/local/pgsql/lib -lpq
    [root@lex tst]# ./testlibpq
    datname        datdba         encoding       datcollate     datctype       datistemplate  datallowconn   datconnlimit   datlastsysoid  datfrozenxid   dattablespace  datacl         
    
    template1      10             6              en_US.UTF-8    en_US.UTF-8    t              t              -1             12783          1672           1663           {=c/postgres,postgres=CTc/postgres}
    template0      10             6              en_US.UTF-8    en_US.UTF-8    t              f              -1             12783          1672           1663           {=c/postgres,postgres=CTc/postgres}
    postgres       10             6              en_US.UTF-8    en_US.UTF-8    f              t              -1             12783          1672           1663                          
    [root@lex tst]# 
  • 相关阅读:
    【每日一题】740. 删除并获得点数
    【每日一题】1473. 粉刷房子 III
    【每日一题】7. 整数反转
    【每日一题】554. 砖墙
    【每日一题】690. 员工的重要性
    【每日一题】137. 只出现一次的数字 II
    【每日一题】403. 青蛙过河
    【每日一题】633. 平方数之和
    【每日一题】938. 二叉搜索树的范围和
    a_lc_到达终点(数学优化)
  • 原文地址:https://www.cnblogs.com/gaojian/p/3140136.html
Copyright © 2011-2022 走看看