⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testlibpq4.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
字号:
/* * testlibpq4.c *		this test programs shows to use LIBPQ to make multiple backend * connections * * */#include <stdio.h>#include "libpq-fe.h"static voidexit_nicely(PGconn *conn1, PGconn *conn2){	if (conn1)		PQfinish(conn1);	if (conn2)		PQfinish(conn2);	exit(1);}static voidcheck_conn(PGconn *conn, const char *dbName){	/* 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(1);	}}intmain(int argc, char **argv){	char	   *pghost,			   *pgport,			   *pgoptions,			   *pgtty;	char	   *dbName1,			   *dbName2;	char	   *tblName;	int			nFields;	int			i,				j;	PGconn	   *conn1,			   *conn2;	/*	 * PGresult   *res1, *res2;	 */	PGresult   *res1;	if (argc != 4)	{		fprintf(stderr, "usage: %s tableName dbName1 dbName2\n", argv[0]);		fprintf(stderr, "      compares two tables in two databases\n");		exit(1);	}	tblName = argv[1];	dbName1 = argv[2];	dbName2 = argv[3];	/*	 * 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 */	/* make a connection to the database */	conn1 = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName1);	check_conn(conn1, dbName1);	conn2 = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName2);	check_conn(conn2, dbName2);	/* start a transaction block */	res1 = PQexec(conn1, "BEGIN");	if (PQresultStatus(res1) != PGRES_COMMAND_OK)	{		fprintf(stderr, "BEGIN command failed\n");		PQclear(res1);		exit_nicely(conn1, conn2);	}	/*	 * should PQclear PGresult whenever it is no longer needed to avoid	 * memory leaks	 */	PQclear(res1);	/*	 * fetch instances from the pg_database, the system catalog of	 * databases	 */	res1 = PQexec(conn1, "DECLARE myportal CURSOR FOR select * from pg_database");	if (PQresultStatus(res1) != PGRES_COMMAND_OK)	{		fprintf(stderr, "DECLARE CURSOR command failed\n");		PQclear(res1);		exit_nicely(conn1, (PGconn *) NULL);	}	PQclear(res1);	res1 = PQexec(conn1, "FETCH ALL in myportal");	if (PQresultStatus(res1) != PGRES_TUPLES_OK)	{		fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");		PQclear(res1);		exit_nicely(conn1, (PGconn *) NULL);	}	/* first, print out the attribute names */	nFields = PQnfields(res1);	for (i = 0; i < nFields; i++)		printf("%-15s", PQfname(res1, i));	printf("\n\n");	/* next, print out the instances */	for (i = 0; i < PQntuples(res1); i++)	{		for (j = 0; j < nFields; j++)			printf("%-15s", PQgetvalue(res1, i, j));		printf("\n");	}	PQclear(res1);	/* close the portal */	res1 = PQexec(conn1, "CLOSE myportal");	PQclear(res1);	/* end the transaction */	res1 = PQexec(conn1, "END");	PQclear(res1);	/* close the connection to the database and cleanup */	PQfinish(conn1);/*	 fclose(debug); */	return 0;					/* Though PQfinish(conn1) has called								 * exit(1) */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -