本文整理汇总了C++中PQfinish函数的典型用法代码示例。如果您正苦于以下问题:C++ PQfinish函数的具体用法?C++ PQfinish怎么用?C++ PQfinish使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PQfinish函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: close_conne
void close_conne(PGconn * conn) {
PQfinish(conn);
getchar();
}
开发者ID:benguillet,项目名称:dcor_backend,代码行数:4,代码来源:database.cpp
示例2: pgsql_query_send
int
pgsql_query_send(char *query, char *connect_info, IDL_VPTR *resultVptr)
{
/* connection info */
PGconn *conn=NULL;
PGresult *res=NULL;
int query_status;
/* Infor about each field */
field_info *fi;
/* Structure definition info */
idl_tag_info *ti;
//UCHAR *dataPtr;
char *dataPtr;
/* temporary pointer to tag data */
UCHAR *tptr;
/* loop variables */
long long row;
int tag;
/* binary or ascii? Only need ascii for file output */
int binary;
int verbose=0;
/* Attempt to establish the connection */
conn = PQconnectdb(connect_info);
if (PQstatus(conn) != CONNECTION_OK)
{
pgsql_query_error("Could not establish connection",
PQerrorMessage(conn));
PQfinish(conn);
return(MYPG_CONNECT_FAILURE);
}
/* send the query and return the results */
if (kw.file_there)
binary = 0;
else
binary = 1;
if (kw.verbose_there)
if (kw.verbose)
verbose = 1;
if (verbose)
IDL_Message(IDL_M_NAMED_GENERIC, IDL_MSG_INFO,
"Querying database non-asynchronously: you may not cancel. For requests you may cancel don't send the /no_async keyword");
res = PQexecParams(conn,
query,
0, /* number of parameters (none) */
NULL, /* see doc for the parameter info */
NULL,
NULL,
NULL,
binary); /* 0 for text, 1 for binary (network order) */
/* Success? */
query_status = pgsql_query_checkstatus(res);
if (query_status != MYPG_SUCCESS)
{
prepExit(conn, res);
return(query_status);
}
/* See if the user input a file to write to */
if (kw.file_there)
{
int write_status;
write_status = pgsql_write_file(res);
prepExit(conn, res);
return(write_status);
}
/* Get information for each returned field */
fi = pgsql_get_field_info(res);
/* Copy into output keywords, if they exist */
pgsql_copy_info(fi);
/* Get info to make struct and copy data */
ti = pgsql_get_idl_tag_info(fi->tagdefs);
/* Create the output structure */
if (verbose)
IDL_Message(IDL_M_NAMED_GENERIC, IDL_MSG_INFO, "Creating output struct");
//.........这里部分代码省略.........
开发者ID:segasai,项目名称:pg_idl,代码行数:101,代码来源:pgsql_query_util.c
示例3: main
//.........这里部分代码省略.........
const char *progname;
int optindex;
int c;
char *dbname = NULL;
char *host = NULL;
char *port = NULL;
char *username = NULL;
enum trivalue prompt_password = TRI_DEFAULT;
bool echo = false;
bool interactive = false;
PQExpBufferData sql;
PGconn *conn;
PGresult *result;
progname = get_progname(argv[0]);
set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
handle_help_version_opts(argc, argv, "dropdb", help);
while ((c = getopt_long(argc, argv, "h:p:U:wWei", long_options, &optindex)) != -1)
{
switch (c)
{
case 'h':
host = optarg;
break;
case 'p':
port = optarg;
break;
case 'U':
username = optarg;
break;
case 'w':
prompt_password = TRI_NO;
break;
case 'W':
prompt_password = TRI_YES;
break;
case 'e':
echo = true;
break;
case 'i':
interactive = true;
break;
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
}
}
switch (argc - optind)
{
case 0:
fprintf(stderr, _("%s: missing required argument database name\n"), progname);
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
case 1:
dbname = argv[optind];
break;
default:
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
progname, argv[optind + 1]);
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
}
if (interactive)
{
printf(_("Database \"%s\" will be permanently removed.\n"), dbname);
if (!yesno_prompt("Are you sure?"))
exit(0);
}
initPQExpBuffer(&sql);
appendPQExpBuffer(&sql, "DROP DATABASE %s;\n",
fmtId(dbname));
conn = connectDatabase(strcmp(dbname, "postgres") == 0 ? "template1" : "postgres",
host, port, username, prompt_password, progname);
if (echo)
printf("%s", sql.data);
result = PQexec(conn, sql.data);
if (PQresultStatus(result) != PGRES_COMMAND_OK)
{
fprintf(stderr, _("%s: database removal failed: %s"),
progname, PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
PQclear(result);
PQfinish(conn);
exit(0);
}
开发者ID:Aldizh,项目名称:buffer_manager,代码行数:101,代码来源:dropdb.c
示例4: sql_conn
/* establish connection with database. */
PGconn *
sql_conn(struct options * my_opts)
{
PGconn *conn;
char *password = NULL;
bool new_pass;
/*
* Start the connection. Loop until we have a password if requested by
* backend.
*/
do
{
#define PARAMS_ARRAY_SIZE 7
const char *keywords[PARAMS_ARRAY_SIZE];
const char *values[PARAMS_ARRAY_SIZE];
keywords[0] = "host";
values[0] = my_opts->hostname;
keywords[1] = "port";
values[1] = my_opts->port;
keywords[2] = "user";
values[2] = my_opts->username;
keywords[3] = "password";
values[3] = password;
keywords[4] = "dbname";
values[4] = my_opts->dbname;
keywords[5] = "fallback_application_name";
values[5] = my_opts->progname;
keywords[6] = NULL;
values[6] = NULL;
new_pass = false;
conn = PQconnectdbParams(keywords, values, true);
if (!conn)
{
fprintf(stderr, "%s: could not connect to database %s\n",
"oid2name", my_opts->dbname);
exit(1);
}
if (PQstatus(conn) == CONNECTION_BAD &&
PQconnectionNeedsPassword(conn) &&
password == NULL)
{
PQfinish(conn);
password = simple_prompt("Password: ", 100, false);
new_pass = true;
}
} while (new_pass);
if (password)
free(password);
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "%s: could not connect to database %s: %s",
"oid2name", my_opts->dbname, PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
/* return the conn if good */
return conn;
}
开发者ID:amenonsen,项目名称:postgres,代码行数:69,代码来源:oid2name.c
示例5: main
int
main(int argc, char **argv)
{
struct options *my_opts;
PGconn *pgconn;
my_opts = (struct options *) pg_malloc(sizeof(struct options));
my_opts->oids = (eary *) pg_malloc(sizeof(eary));
my_opts->tables = (eary *) pg_malloc(sizeof(eary));
my_opts->filenodes = (eary *) pg_malloc(sizeof(eary));
my_opts->oids->num = my_opts->oids->alloc = 0;
my_opts->tables->num = my_opts->tables->alloc = 0;
my_opts->filenodes->num = my_opts->filenodes->alloc = 0;
/* parse the opts */
get_opts(argc, argv, my_opts);
if (my_opts->dbname == NULL)
{
my_opts->dbname = "postgres";
my_opts->nodb = true;
}
pgconn = sql_conn(my_opts);
/* display only tablespaces */
if (my_opts->tablespaces)
{
if (!my_opts->quiet)
printf("All tablespaces:\n");
sql_exec_dumpalltbspc(pgconn, my_opts);
PQfinish(pgconn);
exit(0);
}
/* display the given elements in the database */
if (my_opts->oids->num > 0 ||
my_opts->tables->num > 0 ||
my_opts->filenodes->num > 0)
{
if (!my_opts->quiet)
printf("From database \"%s\":\n", my_opts->dbname);
sql_exec_searchtables(pgconn, my_opts);
PQfinish(pgconn);
exit(0);
}
/* no elements given; dump the given database */
if (my_opts->dbname && !my_opts->nodb)
{
if (!my_opts->quiet)
printf("From database \"%s\":\n", my_opts->dbname);
sql_exec_dumpalltables(pgconn, my_opts);
PQfinish(pgconn);
exit(0);
}
/* no database either; dump all databases */
if (!my_opts->quiet)
printf("All databases:\n");
sql_exec_dumpalldbs(pgconn, my_opts);
PQfinish(pgconn);
return 0;
}
开发者ID:amenonsen,项目名称:postgres,代码行数:69,代码来源:oid2name.c
示例6: get_rel_infos
//.........这里部分代码省略.........
/* exclude possible orphaned temp tables */
" ((n.nspname !~ '^pg_temp_' AND "
" n.nspname !~ '^pg_toast_temp_' AND "
/* skip pg_toast because toast index have relkind == 'i', not 't' */
" n.nspname NOT IN ('pg_catalog', 'information_schema', "
" 'binary_upgrade', 'pg_toast') AND "
" c.oid >= %u) "
" OR (n.nspname = 'pg_catalog' AND "
" relname IN ('pg_largeobject', 'pg_largeobject_loid_pn_index'%s) ));",
/* see the comment at the top of old_8_3_create_sequence_script() */
(GET_MAJOR_VERSION(old_cluster.major_version) <= 803) ?
"" : ", 'S'",
FirstNormalObjectId,
/* does pg_largeobject_metadata need to be migrated? */
(GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ?
"" : ", 'pg_largeobject_metadata', 'pg_largeobject_metadata_oid_index'");
PQclear(executeQueryOrDie(conn, "%s", query));
/*
* Get TOAST tables and indexes; we have to gather the TOAST tables in
* later steps because we can't schema-qualify TOAST tables.
*/
PQclear(executeQueryOrDie(conn,
"INSERT INTO info_rels "
"SELECT reltoastrelid "
"FROM info_rels i JOIN pg_catalog.pg_class c "
" ON i.reloid = c.oid "
" AND c.reltoastrelid != %u", InvalidOid));
PQclear(executeQueryOrDie(conn,
"INSERT INTO info_rels "
"SELECT indexrelid "
"FROM pg_index "
"WHERE indisvalid "
" AND indrelid IN (SELECT reltoastrelid "
" FROM info_rels i "
" JOIN pg_catalog.pg_class c "
" ON i.reloid = c.oid "
" AND c.reltoastrelid != %u)",
InvalidOid));
snprintf(query, sizeof(query),
"SELECT c.oid, n.nspname, c.relname, "
" c.relfilenode, c.reltablespace, %s "
"FROM info_rels i JOIN pg_catalog.pg_class c "
" ON i.reloid = c.oid "
" JOIN pg_catalog.pg_namespace n "
" ON c.relnamespace = n.oid "
" LEFT OUTER JOIN pg_catalog.pg_tablespace t "
" ON c.reltablespace = t.oid "
/* we preserve pg_class.oid so we sort by it to match old/new */
"ORDER BY 1;",
/* 9.2 removed the spclocation column */
(GET_MAJOR_VERSION(cluster->major_version) <= 901) ?
"t.spclocation" : "pg_catalog.pg_tablespace_location(t.oid) AS spclocation");
res = executeQueryOrDie(conn, "%s", query);
ntups = PQntuples(res);
relinfos = (RelInfo *) pg_malloc(sizeof(RelInfo) * ntups);
i_oid = PQfnumber(res, "oid");
i_nspname = PQfnumber(res, "nspname");
i_relname = PQfnumber(res, "relname");
i_relfilenode = PQfnumber(res, "relfilenode");
i_reltablespace = PQfnumber(res, "reltablespace");
i_spclocation = PQfnumber(res, "spclocation");
for (relnum = 0; relnum < ntups; relnum++)
{
RelInfo *curr = &relinfos[num_rels++];
const char *tblspace;
curr->reloid = atooid(PQgetvalue(res, relnum, i_oid));
nspname = PQgetvalue(res, relnum, i_nspname);
curr->nspname = pg_strdup(nspname);
relname = PQgetvalue(res, relnum, i_relname);
curr->relname = pg_strdup(relname);
curr->relfilenode = atooid(PQgetvalue(res, relnum, i_relfilenode));
if (atooid(PQgetvalue(res, relnum, i_reltablespace)) != 0)
/* Might be "", meaning the cluster default location. */
tblspace = PQgetvalue(res, relnum, i_spclocation);
else
/* A zero reltablespace indicates the database tablespace. */
tblspace = dbinfo->db_tblspace;
strlcpy(curr->tablespace, tblspace, sizeof(curr->tablespace));
}
PQclear(res);
PQfinish(conn);
dbinfo->rel_arr.rels = relinfos;
dbinfo->rel_arr.nrels = num_rels;
}
开发者ID:EMARQUIS,项目名称:postgres,代码行数:101,代码来源:info.c
示例7: exit_nicely
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
开发者ID:nuko-yokohama,项目名称:hb_worker,代码行数:6,代码来源:hb.c
示例8: set_frozenxids
/*
* set_frozenxids()
*
* We have frozen all xids, so set relfrozenxid and datfrozenxid
* to be the old cluster's xid counter, which we just set in the new
* cluster. User-table frozenxid values will be set by pg_dumpall
* --binary-upgrade, but objects not set by the pg_dump must have
* proper frozen counters.
*/
static
void
set_frozenxids(void)
{
int dbnum;
PGconn *conn,
*conn_template1;
PGresult *dbres;
int ntups;
int i_datname;
int i_datallowconn;
prep_status("Setting frozenxid counters in new cluster");
conn_template1 = connectToServer(&new_cluster, "template1");
/* set pg_database.datfrozenxid */
PQclear(executeQueryOrDie(conn_template1,
"UPDATE pg_catalog.pg_database "
"SET datfrozenxid = '%u'",
old_cluster.controldata.chkpnt_nxtxid));
/* get database names */
dbres = executeQueryOrDie(conn_template1,
"SELECT datname, datallowconn "
"FROM pg_catalog.pg_database");
i_datname = PQfnumber(dbres, "datname");
i_datallowconn = PQfnumber(dbres, "datallowconn");
ntups = PQntuples(dbres);
for (dbnum = 0; dbnum < ntups; dbnum++)
{
char *datname = PQgetvalue(dbres, dbnum, i_datname);
char *datallowconn = PQgetvalue(dbres, dbnum, i_datallowconn);
/*
* We must update databases where datallowconn = false, e.g.
* template0, because autovacuum increments their datfrozenxids and
* relfrozenxids even if autovacuum is turned off, and even though all
* the data rows are already frozen To enable this, we temporarily
* change datallowconn.
*/
if (strcmp(datallowconn, "f") == 0)
PQclear(executeQueryOrDie(conn_template1,
"UPDATE pg_catalog.pg_database "
"SET datallowconn = true "
"WHERE datname = '%s'", datname));
conn = connectToServer(&new_cluster, datname);
/* set pg_class.relfrozenxid */
PQclear(executeQueryOrDie(conn,
"UPDATE pg_catalog.pg_class "
"SET relfrozenxid = '%u' "
/* only heap and TOAST are vacuumed */
"WHERE relkind IN ('r', 't')",
old_cluster.controldata.chkpnt_nxtxid));
PQfinish(conn);
/* Reset datallowconn flag */
if (strcmp(datallowconn, "f") == 0)
PQclear(executeQueryOrDie(conn_template1,
"UPDATE pg_catalog.pg_database "
"SET datallowconn = false "
"WHERE datname = '%s'", datname));
}
PQclear(dbres);
PQfinish(conn_template1);
check_ok();
}
开发者ID:mjw56,项目名称:postgres,代码行数:83,代码来源:pg_upgrade.c
示例9: guard
KCSQLResult* PgSQLConnection::ExecuteQueryEx(
const char* queryStr,
long iTimeout,
int type
)
{
CMutexGuard guard(m_MutexQuery);
if (m_iAutoConnect)
{
if (m_conn)
{
if ( PQstatus(m_conn) == CONNECTION_BAD )
{
PQreset(m_conn);
// 重试一次不行,就关闭该连接
if (PQstatus(m_conn) == CONNECTION_BAD)
{
PQfinish(m_conn);
m_conn = NULL;
}
}
}
if (m_conn == NULL)
{
if ( !Connect(iTimeout) )
{
return new PgSQLResult(-1, "连接出错");
}
}
}
if (m_conn == NULL)
{
return new PgSQLResult(-1, "无数据库连接");
}
PGresult* result = PQexec(m_conn, queryStr);
if (result == NULL)
{
// 重试
Connect(iTimeout);
result = PQexec(m_conn, queryStr);
}
if (result == NULL)
{
return NULL;
}
ExecStatusType resultInfo = PQresultStatus(result);
m_errorCode = resultInfo;
switch (resultInfo)
{
case PGRES_COMMAND_OK:
// 仅记录影响行数
return new PgSQLResult( PQcmdTuples(result) ? atoi(PQcmdTuples(result)) : 0 );
break;
case PGRES_TUPLES_OK:
return new PgSQLResult(this, result);
break;
default:
return new PgSQLResult(resultInfo, PQresultErrorMessage(result));
break;
}
}
开发者ID:lonsharn,项目名称:lsh_server,代码行数:69,代码来源:kc_pgsql.cpp
示例10: main
/**
* \brief main function for the delagent
*
* There are 2 ways to use the delagent agent:
* 1. Command Line :: delete/list upload/folder/license from the command line
* 2. Agent Based :: run from the scheduler
*
* +-----------------------+
* | Command Line Analysis |
* +-----------------------+
*
* List or delete uploads.
* -h :: help (print this message), then exit.
* -i :: Initialize the DB
* -u :: List uploads IDs.
* -U # :: Delete upload ID.
* -L # :: Delete ALL licenses associated with upload ID.
* -f :: List folder IDs.
* -F # :: Delete folder ID and all uploads under this folder.
* -T :: TEST -- do not update the DB or delete any files (just pretend).
* -v :: Verbose (-vv for more verbose).
* -V :: print the version info, then exit.
* -c SYSCONFDIR :: Specify the directory for the system configuration.
* --user # :: user name
* --password # :: password
*
* +----------------------+
* | Agent Based Analysis |
* +----------------------+
*
* To run the delagent as an agent
* -s :: Run from the scheduler
*
*
* \param argc the number of command line arguments
* \param argv the command line arguments
* \return 0 on a successful program execution
*/
int main (int argc, char *argv[])
{
int c;
int listProj=0, listFolder=0;
long delUpload=0, delFolder=0, delLicense=0, delFolderParent=0;
int scheduler=0; /* should it run from the scheduler? */
int gotArg=0;
char *agent_desc = "Deletes upload. Other list/delete options available from the command line.";
char *COMMIT_HASH;
char *VERSION;
char agent_rev[myBUFSIZ];
int option_index = 0;
char *user_name = NULL;
char *password = NULL;
int user_id = -1;
int user_perm = -1;
int returnedCode = 0;
fo_scheduler_connect(&argc, argv, &db_conn);
static struct option long_options[] =
{
{"user", required_argument, 0, 'n'},
{"password", required_argument, 0, 'p'},
{0, 0, 0, 0}
};
while ((c = getopt_long (argc, argv, "n:p:ifF:lL:sTuU:P:vVc:h",
long_options, &option_index)) != -1)
{
switch (c)
{
case 'n':
user_name = optarg;
break;
case 'p':
password = optarg;
break;
case 'i':
PQfinish(db_conn);
return(0);
case 'f':
listFolder=1;
gotArg=1;
break;
case 'F':
delFolder=atol(optarg);
gotArg=1;
break;
case 'L':
delLicense=atol(optarg);
gotArg=1;
break;
case 'P':
delFolderParent=atol(optarg);
gotArg=1;
break;
case 's':
scheduler=1;
gotArg=1;
break;
case 'T':
//.........这里部分代码省略.........
开发者ID:steffen-weber,项目名称:fossology,代码行数:101,代码来源:delagent.c
示例11: PQconnectdb
void Plugin::saveValue(const char *tagname, const char *tablename, const char *valstring)
{
#ifdef WITHDB
PGconn *conn = NULL;
TObject *dummy=getMemoryObject("Runnumber");
int runnumber=htonl(*(int*) &dummy); //ugly but works
// Make a connection to the database
conn = PQconnectdb("user=runinfo password=runinfo dbname=runinfo host=CookerWorkerNodeLNS00");
// Check to see that the backend connection was successfully made
if (PQstatus(conn) != CONNECTION_OK)
{
debug(0,"Connection to database failed\n");
PQfinish(conn);
return ;
}
const char *params[]={tagname,(char *) &runnumber,valstring};
int lengths[3]={strlen(tagname),sizeof(runnumber),strlen(valstring)};
int binary[3]={0,1,0};
debug(100,"Connection to database - OK\n");
PGresult *res=PQexecParams(conn, "select tagid from tagnames where tagname=$1::varchar;",1,NULL,params,lengths,binary,0);
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
debug(0, "select tagid command failed: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return;
}
debug(100,"Found %i\n",PQntuples(res));
if (PQntuples(res)==0)
{
PQclear(res);
debug(100,"Trying to insert\n");
res=PQexecParams(conn, "insert into tagnames (tagname) values ($1::varchar);",1,NULL,params,lengths,binary,0);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
debug(0, "insert into tagid command failed: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return;
}
}
PQclear(res);
debug(100,"Trying to insert\n");
char command[1000];
sprintf(command,"insert into %s (timestamp,runid,tagid,value) select now(),$2::int4,tagid,$3::double precision from tagnames where tagname=$1::varchar;",tablename);
res=PQexecParams(conn, command,3,NULL,params,lengths,binary,0);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
debug(100, "insert into rundata command failed: %s\n Trying update", PQerrorMessage(conn));
PQclear(res);
sprintf(command,"update %s set timestamp=now(), value=$3::double precision where runid=$2::int4 and tagid=(select tagid from tagnames where tagname=$1::varchar);",tablename);
res=PQexecParams(conn, command,3,NULL,params,lengths,binary,0);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
debug(100, "update failed too: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return;
}
}
PQclear(res);
PQfinish(conn);
#else
debug(10000,"DB not compiled in\n");
#endif
}
开发者ID:egretinhaven,项目名称:TrekCooker,代码行数:70,代码来源:Plugin.cpp
示例12: PgDelConnectionId
/*
* Remove a connection Id from the hash table and
* close all portals the user forgot.
*/
int
PgDelConnectionId(DRIVER_DEL_PROTO)
{
Tcl_HashEntry *entry;
Tcl_HashSearch hsearch;
Pg_ConnectionId *connid;
Pg_TclNotifies *notifies;
int i;
connid = (Pg_ConnectionId *) cData;
for (i = 0; i < connid->res_max; i++)
{
if (connid->results[i])
PQclear(connid->results[i]);
}
ckfree((void *) connid->results);
/* Release associated notify info */
while ((notifies = connid->notify_list) != NULL)
{
connid->notify_list = notifies->next;
for (entry = Tcl_FirstHashEntry(¬ifies->notify_hash, &hsearch);
entry != NULL;
entry = Tcl_NextHashEntry(&hsearch))
ckfree((char *) Tcl_GetHashValue(entry));
Tcl_DeleteHashTable(¬ifies->notify_hash);
if (notifies->conn_loss_cmd)
ckfree((void *) notifies->conn_loss_cmd);
if (notifies->interp)
Tcl_DontCallWhenDeleted(notifies->interp, PgNotifyInterpDelete,
(ClientData) notifies);
ckfree((void *) notifies);
}
/*
* Turn off the Tcl event source for this connection, and delete any
* pending notify and connection-loss events.
*/
PgStopNotifyEventSource(connid, true);
/* Close the libpq connection too */
PQfinish(connid->conn);
connid->conn = NULL;
/*
* Kill the notifier channel, too. We must not do this until after
* we've closed the libpq connection, because Tcl will try to close
* the socket itself!
*
* XXX Unfortunately, while this works fine if we are closing due to
* explicit pg_disconnect, all Tcl versions through 8.4.1 dump core if
* we try to do it during interpreter shutdown. Not clear why. For
* now, we kill the channel during pg_disconnect, but during interp
* shutdown we just accept leakage of the (fairly small) amount of
* memory taken for the channel state representation. (Note we are not
* leaking a socket, since libpq closed that already.) We tell the
* difference between pg_disconnect and interpreter shutdown by
* testing for interp != NULL, which is an undocumented but apparently
* safe way to tell.
*/
#if TCL_MAJOR_VERSION >= 8
if (connid->notifier_channel != NULL && interp != NULL)
Tcl_UnregisterChannel(NULL, connid->notifier_channel);
#endif
/*
* We must use Tcl_EventuallyFree because we don't want the connid
* struct to vanish instantly if Pg_Notify_EventProc is active for it.
* (Otherwise, closing the connection from inside a pg_listen callback
* could lead to coredump.) Pg_Notify_EventProc can detect that the
* connection has been deleted from under it by checking connid->conn.
*/
Tcl_EventuallyFree((ClientData) connid, TCL_DYNAMIC);
return 0;
}
开发者ID:sunyangkobe,项目名称:cscd43,代码行数:81,代码来源:pgtclId.c
示例13: ly_db_close
void ly_db_close(void)
{
if (_db_conn)
PQfinish(_db_conn);
}
开发者ID:alayasix,项目名称:LuoYunCloud,代码行数:5,代码来源:postgres.c
示例14: main
//.........这里部分代码省略.........
if (argc > 1)
conninfo = argv[1];
else
conninfo = "host=localhost port=5432 user=korisk dbname=test";
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
exit_nicely(conn);
}
/* Start a transaction block */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
/*
* * Should PQclear PGresult whenever it is no longer needed to avoid memory
* * leaks
* */
res = PQprepare(conn, "qu", "insert into mrow values ($1::bigint, $2::bigint, $3::float);",3, NULL);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "Prepare query failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
const char *paramValues[3];
int paramLengths[3];
int paramFormats[3];
long time = 0, _time = 0;
long id = 0, _id = 0;
union{
double f;
long i;
} _value, value;
_value.f = 1.0;
value.f = 1.0;
paramValues[0] = (char*)(&time);
paramLengths[0] = sizeof(time);
paramFormats[0] = 1;
paramValues[1] = (char*)(&id);
paramLengths[1] = sizeof(id);
paramFormats[1] = 1;
paramValues[2] = (char*)(&value);
paramLengths[2] = sizeof(value);
paramFormats[2] = 1;
for(i=0; i < 3; i++){
time = htobe64(_time);
id = htobe64(_id);
value.i = htobe64(_value.i);
_time++;
_id++;
_value.f += 0.1;
res = PQexecPrepared(conn, "qu", 3, paramValues, paramLengths, paramFormats, 1);
if (PQresultStatus(res) != PGRES_COMMAND_OK){
fprintf(stderr, "Exec Prepared query failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
}
/*
end the transaction */
res = PQexec(conn, "END");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
return 0;
}
开发者ID:korisk,项目名称:populator,代码行数:101,代码来源:populate.c
示例15: PQfinish
/**
* Destructor
**/
PgFileRepository::~PgFileRepository() {
PQfinish(d_connection);
}
开发者ID:DNPA,项目名称:OcfaLib,代码行数:6,代码来源:PgFileRepository.cpp
示例16: main
int
main(int argc, char **argv)
{
const char *conninfo;
TestSpec *testspec;
int i;
/*
* If the user supplies a parameter on the command line, use it as the
* conninfo string; otherwise default to setting dbname=postgres and
* using environment variables or defaults for all other connection
* parameters.
*/
if (argc > 1)
conninfo = argv[1];
else
conninfo = "dbname = postgres";
/* Read the test spec from stdin */
spec_yyparse();
testspec = &parseresult;
printf("Parsed test spec with %d sessions\n", testspec->nsessions);
/* Establish connections to the database, one for each session */
nconns = testspec->nsessions;
conns = calloc(nconns, sizeof(PGconn *));
for (i = 0; i < testspec->nsessions; i++)
{
PGresult *res;
conns[i] = PQconnectdb(conninfo);
if (PQstatus(conns[i]) != CONNECTION_OK)
{
fprintf(stderr, "Connection %d to database failed: %s",
i, PQerrorMessage(conns[i]));
exit_nicely();
}
/*
* Suppress NOTIFY messages, which otherwise pop into results at odd
* places.
*/
res = PQexec(conns[i], "SET client_min_messages = warning;");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "message level setup failed: %s", PQerrorMessage(conns[i]));
exit_nicely();
}
PQclear(res);
}
/* Set the session index fields in steps. */
for (i = 0; i < testspec->nsessions; i++)
{
Session *session = testspec->sessions[i];
int stepindex;
for (stepindex = 0; stepindex < session->nsteps; stepindex++)
session->steps[stepindex]->session = i;
}
/*
* Run the permutations specified in the spec, or all if none were
* explicitly specified.
*/
if (testspec->permutations)
run_named_permutations(testspec);
else
run_all_permutations(testspec);
/* Clean up and exit */
for (i = 0; i < nconns; i++)
PQfinish(conns[i]);
return 0;
}
开发者ID:LittleForker,项目名称:postgres,代码行数:74,代码来源:isolationtester.c
示例17: connectDatabase
/*
* Make a database connection with the given parameters. An
* interactive password prompt is automatically issued if required.
*/
PGconn *
connectDatabase(const char *dbname, const char *pghost, const char *pgport,
const char *pguser, enum trivalue prompt_password,
const char *progname, bool fail_ok)
{
PGconn *conn;
char *password = NULL;
bool new_pass;
if (prompt_password == TRI_YES)
password = simple_prompt("Password: ", 100, false);
/*
* Start the connection. Loop until we have a password if requested by
* backend.
*/
do
{
#define PARAMS_ARRAY_SIZE 7
const char **keywords = malloc(PARAMS_ARRAY_SIZE * sizeof(*keywords));
const char **values = malloc(PARAMS_ARRAY_SIZE * sizeof(*values));
if (!keywords || !values)
{
fprintf(stderr, _("%s: out of memory\n"), progname);
exit(1);
}
keywords[0] = "host";
values[0] = pghost;
keywords[1] = "port";
values[1] = pgport;
keywords[2] = "user";
values[2] = pguser;
keywords[3] = "password";
values[3] = password;
keywords[4] = "dbname";
values[4] = dbname;
keywords[5] = "fallback_application_name";
values[5] = progname;
keywords[6] = NULL;
values[6] = NULL;
new_pass = false;
conn = PQconnectdbParams(keywords, values, true);
free(keywords);
free(values);
if (!conn)
{
fprintf(stderr, _("%s: could not connect to database %s\n"),
progname, dbname);
exit(1);
}
if (PQstatus(conn) == CONNECTION_BAD &&
PQconnectionNeedsPassword(conn) &&
password == NULL &&
prompt_password != TRI_NO)
{
PQfinish(conn);
password = simple_prompt("Password: ", 100, false);
new_pass = true;
}
} while (new_pass);
if (password)
free(password);
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD)
{
if (fail_ok)
{
PQfinish(conn);
return NULL;
}
fprintf(stderr, _("%s: could not connect to database %s: %s"),
progname, dbname, PQerrorMessage(conn));
exit(1);
}
return conn;
}
开发者ID:denishpatel,项目名称:postgres,代码行数:89,代码来源:common.c
示例18: main
int main()
{
// próba po³±czenia
PGconn *myconnection = PQconnectdb("host=localhost port=5432 dbname=myDb user=mateuszek password=mateuszek");
//PGconn *myconnection = PQconnectdb("");
// sprawdzamy status po³±czenia
if(PQstatus(myconnection) == CONNECTION_OK) {
printf("connection made\n");
// informacje o po³±czeniu
printf("PGDBNAME = %s\n",PQdb(myconnection));
printf("PGUSER = %s\n",PQuser(myconnection));
//printf("PGPASSWORD = %s\n",PQpass(myconnection));
printf("PGPASSWORD = ********\n");
printf("PGHOST = %s\n",PQhost(myconnection));
printf("PGPORT = %s\n",PQport(myconnection));
printf("OPTIONS = %s\n",PQoptions(myconnection));
}
else{
printf("connection failed: %s\n", PQerrorMessage(myconnection));
// w razie utraty po³±czenia wywo³anie
// PQreset(myconnection);
// zamyka op³±czenie i nawi±zuje je raz jeszcze
// z dotychczasowymi parametrami
PQfinish(myconnection);
return EXIT_SUCCESS;
}
int k=1;
int choice;
while (k==1){
printf("wpisz: \n");
printf("\t '0': aby zakonczyc\n");
printf("\t '1' : aby utworzyc tabele\n");
printf("\t '2' : aby usunac tabele\n");
printf("\t '3' : aby dodac rekord\n");
printf("\t '4' : aby edytowac rekord\n");
printf("\t '6' : aby wyswietlic wszystkie rekordy\n");
printf("\t '7' : wyszukaj pracownika po dacie urodzenia\n");
printf("\t '8' : wyszukaj pracownika po stanowisku i nazwisku\n");
scanf("\t%d",&choice);
switch (choice){
case 1 : system("clear");
createTable(myconnection);
break;
case 2 : system("clear");
dropTable(myconnection);
break;
case 3 : system("clear");
addRecord(myconnection);
break;
case 4 : system("clear");
editRecord(myconnection);
break;
case 5 : system("clear");
deleteRecord(myconnection);
break;
case 6 : system("clear");
showAllRecords(myconnection);
break;
case 7 : system("clear");
searchByBirthDate(myconnection);
break;
case 8 : system("clear");
searchByPosAndSalary(myconnection);
break;
default: system("clear");
printf("Nieodpowiedni wybor ('%d').\n\n",choice);
}
}
}
开发者ID:mateuszdargacz,项目名称:aplikacje_bazy_C,代码行数:71,代码来源:connect.c
示例19: main
//.........这里部分代码省略.........
{
#define PARAMS_ARRAY_SIZE 8
const char **keywords = pg_malloc(PARAMS_ARRAY_SIZE * sizeof(*keywords));
const char **values = pg_malloc(PARAMS_ARRAY_SIZE * sizeof(*values));
keywords[0] = "host";
values[0] = options.host;
keywords[1] = "port";
values[1] = options.port;
keywords[2] = "user";
values[2] = options.username;
keywords[3] = "password";
values[3] = password;
keywords[4] = "dbname";
values[4] = (options.list_dbs && options.dbname == NULL) ?
"postgres" : options.dbname;
keywords[5] = "fallback_application_name";
values[5] = pset.progname;
keywords[6] = "client_encoding";
values[6] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
keywords[7] = NULL;
values[7] = NULL;
new_pass = false;
pset.db = PQconnectdbParams(keywords, values, true);
free(keywords);
free(values);
if (PQstatus(pset.db) == CONNECTION_BAD &&
PQconnectionNeedsPassword(pset.db) &&
password == NULL &&
pset.getPassword != TRI_NO)
{
PQfinish(pset.db);
password = simple_prompt(password_prompt, 100, false);
new_pass = true;
}
} while (new_pass);
free(password);
free(password_prompt);
if (PQstatus(pset.db) == CONNECTION_BAD)
{
fprintf(stderr, "%s: %s", pset.progname, PQerrorMessage(pset.db));
PQfinish(pset.db);
exit(EXIT_BADCONN);
}
setup_cancel_handler();
PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL);
SyncVariables();
if (options.list_dbs)
{
int success;
if (!options.no_psqlrc)
process_psqlrc(argv[0]);
success = listAllDbs(NULL, false);
PQfinish(pset.db);
exit(success ? EXIT_SUCCESS : EXIT_FAILURE);
}
开发者ID:Princever,项目名称:postgres,代码行数:67,代码来源:startup.c
示例20: hb_main
//.........这里部分代码省略.........
*/
res = PQexec(conn, "LISTEN HB_SV");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
elog(WARNING, "LISTEN command failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid memory
* leaks
*/
PQclear(res);
/* Set Secret Number */
memset(number, 0x00, 5);
create_random_number(number);
elog(LOG , "hb_worker: set secret number=%s\n", number);
/* Quit after four notifies are received. */
nnotifies = 0;
while (1)
{
/*
* Sleep until something happens on the connection. We use select(2)
* to wait for input, but you could also use poll() or similar
* facilities.
*/
int sock;
fd_se
|
请发表评论