程序:

[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.\n", 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\n");
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\n");
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\n");
PQclear(res);
exit_nicely(conn);
} /* first, print out the attribute names */
nFields = PQnfields(res);
for (i = ; i < nFields; i++)
printf("%-15s", PQfname(res, i)); printf("\n\n"); /* next, print out the instances */
for (i = ; i < PQntuples(res); i++)
{
for (j = ; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
} 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 ;
}
[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 en_US.UTF- en_US.UTF- t t - {=c/postgres,postgres=CTc/postgres}
template0 en_US.UTF- en_US.UTF- t f - {=c/postgres,postgres=CTc/postgres}
postgres en_US.UTF- en_US.UTF- f t -
[root@lex tst]#

最新文章

  1. 学习Google Protocol buffer之语法
  2. 如何卸除SDL TRADOS中的自开发插件
  3. 7、JavaScript总结——实现选项卡切换的效果
  4. 数据库批量修改表名,增加前缀(SQL server)
  5. 解决android sdk manage打开闪退的解决方法
  6. .Net缓存
  7. 自动注册 IIS6 的 MIME 类型
  8. 调用js中文乱码
  9. [Vani有约会]雨天的尾巴(树上差分+线段树合并)
  10. java的IO流的一些测试
  11. thymeleaf学习笔记:总结
  12. addEventListener.js
  13. HDU 4289 Control (网络流,最大流)
  14. mongodb常用操作命令(待续)
  15. Codeforces 349B - Color the Fence
  16. mysql通过mysqldump工具,对某个库下的表进行备份
  17. 希尔排序算法-python实现
  18. windows环境下ElasticSearch5以上版本安装head插件
  19. 创建image
  20. SCWS中文分词,安装说明(以:Win32环境、utf8字符集为例)

热门文章

  1. 使用PHP处理POST上传时$_FILES数组为何为空
  2. Android开发之音乐播放器的实现
  3. Windows 7/8 自带定时关机命令
  4. nodejs创建express+ejs项目
  5. sharedevelop iis express
  6. asp.net(vs2005) + Sql2000 缓存依赖
  7. String中intern的方法
  8. acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)
  9. 剑指Offer:打印从1到最大的n位数
  10. hibernate注解影射表