PostgreSQL数据库学习手册之libpq(5)

2020-03-26 20:31

* fetch rows from the pg_database, the system catalog of * databases */

res = PQexec(conn, \ if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {

fprintf(stderr, \ PQclear(res); exit_nicely(conn); }

PQclear(res);

res = PQexec(conn, \ if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) {

fprintf(stderr, \ PQclear(res); exit_nicely(conn); }

/* first, print out the attribute names */ nFields = PQnfields(res); for (i = 0; i < nFields; i++) printf(\ printf(\

/* next, print out the rows */ for (i = 0; i < PQntuples(res); i++) {

for (j = 0; j < nFields; j++)

printf(\ printf(\ }

PQclear(res); /* close the cursor */

res = PQexec(conn, \ PQclear(res);

/* commit the transaction */ res = PQexec(conn, \ PQclear(res);

/* close the connection to the database and cleanup */ PQfinish(conn); /* fclose(debug); */ return 0; } [/myphp]

Example 1-2. libpq 例子程序 2

[myphp] /*

* testlibpq2.c * 测试异步通知接口 *

* 运行此程序,然后从另外一个窗口的 psql 里运行 NOTIFY TBL2; *

* 或者,如果你想好玩一点,尝试下面动作∶ * 用下面的语句填充一个数据库∶ *

* CREATE TABLE TBL1 (i int4); *

* CREATE TABLE TBL2 (i int4); *

* CREATE RULE r1 AS ON INSERT TO TBL1 DO * (INSERT INTO TBL2 values (new.i); NOTIFY TBL2); * * 然后∶ *

* INSERT INTO TBL1 values (10); * */

#include #include \ void

exit_nicely(PGconn *conn) {

PQfinish(conn); exit(1); } main() {

char *pghost, *pgport, *pgoptions, *pgtty; char *dbName; int nFields; int i, j;

PGconn *conn; PGresult *res; PGnotify *notify; /*

* begin, by setting the parameters for a backend connection if the * parameters are null, then the system will try to use reasonable * defaults by looking up environment variables or, failing that, * using hardwired constants */

pghost = NULL; /* host name of the backend server */ pgport = NULL; /* port of the backend server */

pgoptions = NULL; /* special options to start up the backend * server */

pgtty = NULL; /* debugging tty for the backend server */ dbName = getenv(\ * database */

/* make a connection to the database */

conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName); /*

* check to see that the backend connection was successfully made */

if (PQstatus(conn) == CONNECTION_BAD) {

fprintf(stderr, \ fprintf(stderr, \ exit_nicely(conn); }

res = PQexec(conn, \

if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {

fprintf(stderr, \ PQclear(res); exit_nicely(conn); } /*

* should PQclear PGresult whenever it is no longer needed to avoid * memory leaks */

PQclear(res); while (1) { /*

* wait a little bit between checks; waiting with select() * would be more efficient. */ sleep(1);

/* collect any asynchronous backend messages */ PQconsumeInput(conn);

/* check for asynchronous notify messages */ while ((notify = PQnotifies(conn)) != NULL) {

fprintf(stderr,

\ notify->relname, notify->be_pid); free(notify); } }

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

Example 1-3. libpq 例子程序 3 /*

* testlibpq3.c 测试 C 版本的 Libpq --PostgreSQL的前端库. * 测试二进制游标接口 * * *

* 用下面语句填充一个数据库∶ *

* CREATE TABLE test1 (i int4, d real, p polygon); *

* INSERT INTO test1 values (1, 3.567, polygon '(3.0, 4.0, 1.0, 2.0)'); *

* INSERT INTO test1 values (2, 89.05, polygon '(4.0, 3.0, 2.0, 1.0)'); *

* 预期的输出是∶ *

* tuple 0: got i = (4 bytes) 1, d = (4 bytes) 3.567000, p = (4 * bytes) 2 points boundbox = (hi=3.000000/4.000000, lo = * 1.000000,2.000000) tuple 1: got i = (4 bytes) 2, d = (4 bytes) * 89.050003, p = (4 bytes) 2 points boundbox = * (hi=4.000000/3.000000, lo = 2.000000,1.000000) * * */

#include #include \

#include \ void

exit_nicely(PGconn *conn) {

PQfinish(conn); exit(1); } main() {

char *pghost, *pgport, *pgoptions, *pgtty; char *dbName; int nFields; int i, j; int i_fnum, d_fnum, p_fnum; PGconn *conn; PGresult *res; /*

* begin, by setting the parameters for a backend connection if the * parameters are null, then the system will try to use reasonable * defaults by looking up environment variables or, failing that, * using hardwired constants */

pghost = NULL; /* host name of the backend server */ pgport = NULL; /* port of the backend server */

pgoptions = NULL; /* special options to start up the backend * server */

pgtty = NULL; /* debugging tty for the backend server */ dbName = getenv(\ * database */

/* make a connection to the database */

conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName); /*

* check to see that the backend connection was successfully made */

if (PQstatus(conn) == CONNECTION_BAD) {

fprintf(stderr, \ fprintf(stderr, \ exit_nicely(conn); }

/* start a transaction block */ res = PQexec(conn, \


PostgreSQL数据库学习手册之libpq(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:航运术语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: