/* check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "%s", PQerrorMessage(conn)); exit(1);
}
/* Set always-secure search path, so malicious users can't take control. */
res = PQexec(conn, "SELECT pg_catalog.set_config('search_path', '', false)"); if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "SET failed: %s", PQerrorMessage(conn));
PQclear(res); exit(1);
}
PQclear(res);
}
int
main(int argc, char **argv)
{ char *pghost,
*pgport,
*pgoptions; 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,bysettingtheparametersforabackendconnectionifthe *parametersarenull,thenthesystemwilltrytousereasonable *defaultsbylookingupenvironmentvariablesor,failingthat,using *hardwiredconstants
*/
pghost = NULL; /* host name of the backend */
pgport = NULL; /* port of the backend */
pgoptions = NULL; /* special options to start up the backend
* server */
/* make a connection to the database */
conn1 = PQsetdb(pghost, pgport, pgoptions, NULL, dbName1);
check_prepare_conn(conn1, dbName1);
/* *fetchinstancesfromthepg_database,thesystemcatalogofdatabases
*/
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, conn2);
}
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, conn2);
}
/* 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 connections to the database and cleanup */
PQfinish(conn1);
PQfinish(conn2);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.