* 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
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 \ 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, \
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库PostgreSQL数据库学习手册之libpq(5)在线全文阅读。
相关推荐: