mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Allow pg_dump to preserve owners of all objects.
This commit is contained in:
parent
0acf9c9b28
commit
dd2c410616
@ -21,7 +21,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.32 1997/06/07 05:29:22 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.33 1997/06/20 02:20:17 momjian Exp $
|
||||
*
|
||||
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
|
||||
*
|
||||
@ -263,7 +263,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname,
|
||||
int tuple;
|
||||
int field;
|
||||
|
||||
sprintf(query, "select * from %s;\n", classname);
|
||||
sprintf(query, "select * from %s", classname);
|
||||
res = PQexec(g_conn, query);
|
||||
if (!res ||
|
||||
PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||
@ -546,6 +546,7 @@ getTypes(int *numTypes)
|
||||
int i_typdefault;
|
||||
int i_typrelid;
|
||||
int i_typbyval;
|
||||
int i_usename;
|
||||
|
||||
res = PQexec(g_conn, "begin");
|
||||
if (!res ||
|
||||
@ -561,9 +562,10 @@ getTypes(int *numTypes)
|
||||
/* we filter out the built-in types when
|
||||
we dump out the types */
|
||||
|
||||
sprintf(query, "SELECT oid, typowner,typname, typlen, typprtlen, "
|
||||
sprintf(query, "SELECT pg_type.oid, typowner,typname, typlen, typprtlen, "
|
||||
"typinput, typoutput, typreceive, typsend, typelem, typdelim, "
|
||||
"typdefault, typrelid,typbyval from pg_type");
|
||||
"typdefault, typrelid,typbyval, usename from pg_type, pg_user "
|
||||
"where typowner = usesysid");
|
||||
|
||||
res = PQexec(g_conn,query);
|
||||
if (!res ||
|
||||
@ -590,6 +592,7 @@ getTypes(int *numTypes)
|
||||
i_typdefault = PQfnumber(res,"typdefault");
|
||||
i_typrelid = PQfnumber(res,"typrelid");
|
||||
i_typbyval = PQfnumber(res,"typbyval");
|
||||
i_usename = PQfnumber(res,"usename");
|
||||
|
||||
for (i=0;i<ntups;i++) {
|
||||
tinfo[i].oid = strdup(PQgetvalue(res,i,i_oid));
|
||||
@ -605,6 +608,7 @@ getTypes(int *numTypes)
|
||||
tinfo[i].typdelim = strdup(PQgetvalue(res,i,i_typdelim));
|
||||
tinfo[i].typdefault = strdup(PQgetvalue(res,i,i_typdefault));
|
||||
tinfo[i].typrelid = strdup(PQgetvalue(res,i,i_typrelid));
|
||||
tinfo[i].usename = strdup(PQgetvalue(res,i,i_usename));
|
||||
|
||||
if (strcmp(PQgetvalue(res,i,i_typbyval), "f") == 0)
|
||||
tinfo[i].passedbyvalue = 0;
|
||||
@ -662,6 +666,7 @@ getOperators(int *numOprs)
|
||||
int i_oprcanhash;
|
||||
int i_oprlsortop;
|
||||
int i_oprrsortop;
|
||||
int i_usename;
|
||||
|
||||
/* find all operators, including builtin operators,
|
||||
filter out system-defined operators at dump-out time */
|
||||
@ -673,9 +678,11 @@ getOperators(int *numOprs)
|
||||
}
|
||||
PQclear(res);
|
||||
|
||||
sprintf(query, "SELECT oid, oprname, oprkind, oprcode, oprleft, "
|
||||
"oprright, oprcom, oprnegate, oprrest, oprjoin, oprcanhash, "
|
||||
"oprlsortop, oprrsortop from pg_operator");
|
||||
sprintf(query, "SELECT pg_operator.oid, oprname, oprkind, oprcode, "
|
||||
"oprleft, oprright, oprcom, oprnegate, oprrest, oprjoin, "
|
||||
"oprcanhash, oprlsortop, oprrsortop, usename "
|
||||
"from pg_operator, pg_user "
|
||||
"where oprowner = usesysid");
|
||||
|
||||
res = PQexec(g_conn, query);
|
||||
if (!res ||
|
||||
@ -702,6 +709,7 @@ getOperators(int *numOprs)
|
||||
i_oprcanhash = PQfnumber(res,"oprcanhash");
|
||||
i_oprlsortop = PQfnumber(res,"oprlsortop");
|
||||
i_oprrsortop = PQfnumber(res,"oprrsortop");
|
||||
i_usename = PQfnumber(res,"usename");
|
||||
|
||||
for (i=0;i<ntups;i++) {
|
||||
oprinfo[i].oid = strdup(PQgetvalue(res,i,i_oid));
|
||||
@ -717,6 +725,7 @@ getOperators(int *numOprs)
|
||||
oprinfo[i].oprcanhash = strdup(PQgetvalue(res,i,i_oprcanhash));
|
||||
oprinfo[i].oprlsortop = strdup(PQgetvalue(res,i,i_oprlsortop));
|
||||
oprinfo[i].oprrsortop = strdup(PQgetvalue(res,i,i_oprrsortop));
|
||||
oprinfo[i].usename = strdup(PQgetvalue(res,i,i_usename));
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
@ -744,6 +753,7 @@ for(i=0;i<numTypes;++i) {
|
||||
if(tp[i].typdelim) free(tp[i].typdelim);
|
||||
if(tp[i].typdefault) free(tp[i].typdefault);
|
||||
if(tp[i].typrelid) free(tp[i].typrelid);
|
||||
if(tp[i].usename) free(tp[i].usename);
|
||||
}
|
||||
free(tp);
|
||||
}
|
||||
@ -756,7 +766,7 @@ if(!fun) return;
|
||||
for(i=0;i<numFuncs;++i) {
|
||||
if(fun[i].oid) free(fun[i].oid);
|
||||
if(fun[i].proname) free(fun[i].proname);
|
||||
if(fun[i].proowner) free(fun[i].proowner);
|
||||
if(fun[i].usename) free(fun[i].usename);
|
||||
for(a=0;a<8;++a)
|
||||
if(fun[i].argtypes[a]) free(fun[i].argtypes[a]);
|
||||
if(fun[i].prorettype) free(fun[i].prorettype);
|
||||
@ -783,6 +793,7 @@ for(i=0;i<numTables;++i) {
|
||||
if(tblinfo[i].inhAttrs) free((int *)tblinfo[i].inhAttrs);
|
||||
if(tblinfo[i].attnames) free (tblinfo[i].attnames);
|
||||
if(tblinfo[i].typnames) free (tblinfo[i].typnames);
|
||||
if(tblinfo[i].usename) free (tblinfo[i].usename);
|
||||
}
|
||||
free(tblinfo);
|
||||
}
|
||||
@ -816,6 +827,7 @@ for(i=0;i<numOprs;++i) {
|
||||
if(opr[i].oprcanhash) free(opr[i].oprcanhash);
|
||||
if(opr[i].oprlsortop) free(opr[i].oprlsortop);
|
||||
if(opr[i].oprrsortop) free(opr[i].oprrsortop);
|
||||
if(opr[i].usename) free(opr[i].usename);
|
||||
}
|
||||
free(opr);
|
||||
}
|
||||
@ -854,6 +866,7 @@ for(i=0;i<numArgs;++i) {
|
||||
if(agginfo[i].aggtranstype2) free (agginfo[i].aggtranstype2);
|
||||
if(agginfo[i].agginitval1) free (agginfo[i].agginitval1);
|
||||
if(agginfo[i].agginitval2) free (agginfo[i].agginitval2);
|
||||
if(agginfo[i].usename) free (agginfo[i].usename);
|
||||
}
|
||||
free (agginfo);
|
||||
}
|
||||
@ -886,6 +899,7 @@ getAggregates(int *numAggs)
|
||||
int i_aggtranstype2;
|
||||
int i_agginitval1;
|
||||
int i_agginitval2;
|
||||
int i_usename;
|
||||
|
||||
/* find all user-defined aggregates */
|
||||
|
||||
@ -898,9 +912,10 @@ getAggregates(int *numAggs)
|
||||
PQclear(res);
|
||||
|
||||
sprintf(query,
|
||||
"SELECT oid, aggname, aggtransfn1, aggtransfn2, aggfinalfn, "
|
||||
"aggtranstype1, aggbasetype, aggtranstype2, agginitval1, "
|
||||
"agginitval2 from pg_aggregate;");
|
||||
"SELECT pg_aggregate.oid, aggname, aggtransfn1, aggtransfn2, "
|
||||
"aggfinalfn, aggtranstype1, aggbasetype, aggtranstype2, "
|
||||
"agginitval1, agginitval2, usename from pg_aggregate, pg_user "
|
||||
"where aggowner = usesysid");
|
||||
|
||||
res = PQexec(g_conn, query);
|
||||
if (!res ||
|
||||
@ -924,6 +939,7 @@ getAggregates(int *numAggs)
|
||||
i_aggtranstype2 = PQfnumber(res,"aggtranstype2");
|
||||
i_agginitval1 = PQfnumber(res,"agginitval1");
|
||||
i_agginitval2 = PQfnumber(res,"agginitval2");
|
||||
i_usename = PQfnumber(res,"usename");
|
||||
|
||||
for (i=0;i<ntups;i++) {
|
||||
agginfo[i].oid = strdup(PQgetvalue(res,i,i_oid));
|
||||
@ -936,6 +952,7 @@ getAggregates(int *numAggs)
|
||||
agginfo[i].aggtranstype2 = strdup(PQgetvalue(res,i,i_aggtranstype2));
|
||||
agginfo[i].agginitval1 = strdup(PQgetvalue(res,i,i_agginitval1));
|
||||
agginfo[i].agginitval2 = strdup(PQgetvalue(res,i,i_agginitval2));
|
||||
agginfo[i].usename = strdup(PQgetvalue(res,i,i_usename));
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
@ -965,7 +982,6 @@ getFuncs(int *numFuncs)
|
||||
|
||||
int i_oid;
|
||||
int i_proname;
|
||||
int i_proowner;
|
||||
int i_prolang;
|
||||
int i_pronargs;
|
||||
int i_proargtypes;
|
||||
@ -973,6 +989,7 @@ getFuncs(int *numFuncs)
|
||||
int i_proretset;
|
||||
int i_prosrc;
|
||||
int i_probin;
|
||||
int i_usename;
|
||||
|
||||
/* find all user-defined funcs */
|
||||
|
||||
@ -985,9 +1002,10 @@ getFuncs(int *numFuncs)
|
||||
PQclear(res);
|
||||
|
||||
sprintf(query,
|
||||
"SELECT oid, proname, proowner, prolang, pronargs, prorettype, "
|
||||
"proretset, proargtypes, prosrc, probin from pg_proc "
|
||||
"where oid > '%d'::oid",
|
||||
"SELECT pg_proc.oid, proname, prolang, pronargs, prorettype, "
|
||||
"proretset, proargtypes, prosrc, probin, usename "
|
||||
"from pg_proc, pg_user "
|
||||
"where pg_proc.oid > '%d'::oid and proowner = usesysid",
|
||||
g_last_builtin_oid);
|
||||
|
||||
res = PQexec(g_conn, query);
|
||||
@ -1005,7 +1023,6 @@ getFuncs(int *numFuncs)
|
||||
|
||||
i_oid = PQfnumber(res,"oid");
|
||||
i_proname = PQfnumber(res,"proname");
|
||||
i_proowner = PQfnumber(res,"proowner");
|
||||
i_prolang = PQfnumber(res,"prolang");
|
||||
i_pronargs = PQfnumber(res,"pronargs");
|
||||
i_proargtypes = PQfnumber(res,"proargtypes");
|
||||
@ -1013,11 +1030,11 @@ getFuncs(int *numFuncs)
|
||||
i_proretset = PQfnumber(res,"proretset");
|
||||
i_prosrc = PQfnumber(res,"prosrc");
|
||||
i_probin = PQfnumber(res,"probin");
|
||||
i_usename = PQfnumber(res,"usename");
|
||||
|
||||
for (i=0;i<ntups;i++) {
|
||||
finfo[i].oid = strdup(PQgetvalue(res,i,i_oid));
|
||||
finfo[i].proname = strdup(PQgetvalue(res,i,i_proname));
|
||||
finfo[i].proowner = strdup(PQgetvalue(res,i,i_proowner));
|
||||
|
||||
finfo[i].prosrc = checkForQuote(PQgetvalue(res,i,i_prosrc));
|
||||
finfo[i].probin = strdup(PQgetvalue(res,i,i_probin));
|
||||
@ -1027,6 +1044,8 @@ getFuncs(int *numFuncs)
|
||||
finfo[i].nargs = atoi(PQgetvalue(res,i,i_pronargs));
|
||||
finfo[i].lang = (atoi(PQgetvalue(res,i,i_prolang)) == C_PROLANG_OID);
|
||||
|
||||
finfo[i].usename = strdup(PQgetvalue(res,i,i_usename));
|
||||
|
||||
parseArgTypes(finfo[i].argtypes, PQgetvalue(res,i,i_proargtypes));
|
||||
|
||||
finfo[i].dumped = 0;
|
||||
@ -1063,6 +1082,7 @@ getTables(int *numTables)
|
||||
int i_relarch;
|
||||
int i_relkind;
|
||||
int i_relacl;
|
||||
int i_usename;
|
||||
|
||||
/* find all the user-defined tables (no indices and no catalogs),
|
||||
ordering by oid is important so that we always process the parent
|
||||
@ -1079,9 +1099,11 @@ getTables(int *numTables)
|
||||
PQclear(res);
|
||||
|
||||
sprintf(query,
|
||||
"SELECT oid, relname, relarch, relkind, relacl from pg_class "
|
||||
"where (relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
|
||||
"and relname !~ '^xin[xv][0-9]+' order by oid;");
|
||||
"SELECT pg_class.oid, relname, relarch, relkind, relacl, usename "
|
||||
"from pg_class, pg_user "
|
||||
"where relowner = usesysid and "
|
||||
"(relkind = 'r' or relkind = 'S') and relname !~ '^pg_' "
|
||||
"and relname !~ '^xin[xv][0-9]+' order by oid");
|
||||
|
||||
res = PQexec(g_conn, query);
|
||||
if (!res ||
|
||||
@ -1101,6 +1123,7 @@ getTables(int *numTables)
|
||||
i_relarch = PQfnumber(res,"relarch");
|
||||
i_relkind = PQfnumber(res,"relkind");
|
||||
i_relacl = PQfnumber(res,"relacl");
|
||||
i_usename = PQfnumber(res,"usename");
|
||||
|
||||
for (i=0;i<ntups;i++) {
|
||||
tblinfo[i].oid = strdup(PQgetvalue(res,i,i_oid));
|
||||
@ -1108,6 +1131,7 @@ getTables(int *numTables)
|
||||
tblinfo[i].relarch = strdup(PQgetvalue(res,i,i_relarch));
|
||||
tblinfo[i].relacl = strdup(PQgetvalue(res,i,i_relacl));
|
||||
tblinfo[i].sequence = (strcmp (PQgetvalue(res,i,i_relkind), "S") == 0);
|
||||
tblinfo[i].usename = strdup(PQgetvalue(res,i,i_usename));
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
@ -1305,7 +1329,7 @@ getIndices(int *numIndices)
|
||||
"from pg_index i, pg_class t1, pg_class t2, pg_am a "
|
||||
"where t1.oid = i.indexrelid and t2.oid = i.indrelid "
|
||||
"and t1.relam = a.oid and i.indexrelid > '%d'::oid "
|
||||
"and t2.relname !~ '^pg_' and t1.relname !~ '^Xinx' ;",
|
||||
"and t2.relname !~ '^pg_' and t1.relname !~ '^Xinx'",
|
||||
g_last_builtin_oid);
|
||||
|
||||
res = PQexec(g_conn, query);
|
||||
@ -1384,6 +1408,8 @@ dumpTypes(FILE* fout, FuncInfo* finfo, int numFuncs,
|
||||
if (funcInd != -1)
|
||||
dumpOneFunc(fout,finfo,funcInd,tinfo,numTypes);
|
||||
|
||||
fprintf(fout,"\\connect - %s\n",tinfo[i].usename);
|
||||
|
||||
sprintf(q,
|
||||
"CREATE TYPE %s "
|
||||
"( internallength = %s, externallength = %s, input = %s, "
|
||||
@ -1448,6 +1474,8 @@ dumpOneFunc(FILE* fout, FuncInfo* finfo, int i,
|
||||
else
|
||||
finfo[i].dumped = 1;
|
||||
|
||||
fprintf(fout,"\\connect - %s\n",finfo[i].usename);
|
||||
|
||||
sprintf(q,"CREATE FUNCTION %s (",finfo[i].proname);
|
||||
for (j=0;j<finfo[i].nargs;j++) {
|
||||
char* typname;
|
||||
@ -1547,6 +1575,8 @@ dumpOprs(FILE* fout, OprInfo* oprinfo, int numOperators,
|
||||
oprinfo[i].oprlsortop));
|
||||
}
|
||||
|
||||
fprintf(fout,"\\connect - %s\n", oprinfo[i].usename);
|
||||
|
||||
sprintf(q,
|
||||
"CREATE OPERATOR %s "
|
||||
"(PROCEDURE = %s %s %s %s %s %s %s %s %s);\n ",
|
||||
@ -1627,6 +1657,8 @@ dumpAggs(FILE* fout, AggInfo* agginfo, int numAggs,
|
||||
} else
|
||||
comma2[0] = '\0';
|
||||
|
||||
fprintf(fout,"\\connect - %s\n", agginfo[i].usename);
|
||||
|
||||
sprintf(q,"CREATE AGGREGATE %s ( %s %s %s %s %s );\n",
|
||||
agginfo[i].aggname,
|
||||
sfunc1,
|
||||
@ -1677,6 +1709,8 @@ void dumpTables(FILE* fout, TableInfo *tblinfo, int numTables,
|
||||
parentRels = tblinfo[i].parentRels;
|
||||
numParents = tblinfo[i].numParents;
|
||||
|
||||
fprintf(fout, "\\connect - %s\n", tblinfo[i].usename);
|
||||
|
||||
sprintf(q, "CREATE TABLE %s (", tblinfo[i].relname);
|
||||
actual_atts = 0;
|
||||
for (j=0;j<tblinfo[i].numatts;j++) {
|
||||
@ -2006,7 +2040,7 @@ findLastBuiltinOid(void)
|
||||
int last_oid;
|
||||
|
||||
res = PQexec(g_conn,
|
||||
"SELECT oid from pg_database where datname = 'template1';");
|
||||
"SELECT oid from pg_database where datname = 'template1'");
|
||||
if (res == NULL ||
|
||||
PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||
fprintf(stderr,"pg_dump error in finding the template1 database\n");
|
||||
@ -2066,7 +2100,7 @@ static void dumpSequence (FILE* fout, TableInfo tbinfo)
|
||||
|
||||
sprintf (query,
|
||||
"SELECT sequence_name, last_value, increment_by, max_value, "
|
||||
"min_value, cache_value, is_cycled, is_called from %s;",
|
||||
"min_value, cache_value, is_cycled, is_called from %s",
|
||||
tbinfo.relname);
|
||||
|
||||
res = PQexec (g_conn, query);
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.73 1997/06/11 01:03:38 scrappy Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.74 1997/06/20 02:20:26 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -153,10 +153,12 @@ on(bool f)
|
||||
static void
|
||||
slashUsage(PsqlSettings * ps)
|
||||
{
|
||||
int ch;
|
||||
|
||||
fprintf(stderr, " \\? -- help\n");
|
||||
fprintf(stderr, " \\a -- toggle field-alignment (currenty %s)\n", on(ps->opt.align));
|
||||
fprintf(stderr, " \\C [<captn>] -- set html3 caption (currently '%s')\n", ps->opt.caption ? ps->opt.caption : "");
|
||||
fprintf(stderr, " \\connect <dbname> <user> -- connect to new database (currently '%s')\n", PQdb(ps->db));
|
||||
fprintf(stderr, " \\connect <dbname|-> <user> -- connect to new database (currently '%s')\n", PQdb(ps->db));
|
||||
fprintf(stderr, " \\copy table {from | to} <fname>\n");
|
||||
fprintf(stderr, " \\d [<table>] -- list tables and indicies in database or columns in <table>, * for all\n");
|
||||
fprintf(stderr, " \\di -- list only indicies in database\n");
|
||||
@ -172,6 +174,11 @@ slashUsage(PsqlSettings * ps)
|
||||
fprintf(stderr, " \\m -- toggle monitor-like table display (currently %s)\n", on(ps->opt.standard));
|
||||
fprintf(stderr, " \\o [<fname>] [|<cmd>] -- send all query results to stdout, <fname>, or pipe\n");
|
||||
fprintf(stderr, " \\p -- print the current query buffer\n");
|
||||
|
||||
fprintf(stderr, "Press ENTER to continue");
|
||||
/* eat up any extra characters typed before ENTER */
|
||||
while ((ch = fgetc(stdin)) != '\r' && ch != '\n')
|
||||
;
|
||||
fprintf(stderr, " \\q -- quit\n");
|
||||
fprintf(stderr, " \\r -- reset(clear) the query buffer\n");
|
||||
fprintf(stderr, " \\s [<fname>] -- print history or save it in <fname>\n");
|
||||
@ -858,18 +865,16 @@ do_copy(const char *args, PsqlSettings * settings)
|
||||
static void
|
||||
do_connect(const char *new_dbname,
|
||||
const char *new_user,
|
||||
PsqlSettings * settings)
|
||||
PsqlSettings *settings)
|
||||
{
|
||||
|
||||
char *dbname = PQdb(settings->db);
|
||||
if (!new_dbname)
|
||||
fprintf(stderr, "\\connect must be followed by a database name\n");
|
||||
else {
|
||||
PGconn *olddb = settings->db;
|
||||
PGconn *olddb = settings->db;
|
||||
static char *userenv = NULL;
|
||||
char *old_userenv = NULL;
|
||||
const char *dbparam;
|
||||
|
||||
printf("closing connection to database: %s\n", dbname);
|
||||
if (new_user != NULL) {
|
||||
/*
|
||||
PQsetdb() does not allow us to specify the user,
|
||||
@ -885,23 +890,27 @@ do_connect(const char *new_dbname,
|
||||
if (old_userenv != NULL)
|
||||
free(old_userenv);
|
||||
}
|
||||
|
||||
if (strcmp(new_dbname,"-") != 0)
|
||||
dbparam = new_dbname;
|
||||
else dbparam = PQdb(olddb);
|
||||
|
||||
settings->db = PQsetdb(PQhost(olddb), PQport(olddb),
|
||||
NULL, NULL, new_dbname);
|
||||
if (!new_user)
|
||||
printf("connecting to new database: %s\n", new_dbname);
|
||||
else
|
||||
printf("connecting to new database: %s as user: %s\n",
|
||||
new_dbname,new_user);
|
||||
NULL, NULL, dbparam);
|
||||
if (!settings->quiet) {
|
||||
if (!new_user)
|
||||
printf("connecting to new database: %s\n", dbparam);
|
||||
else if (dbparam != new_dbname)
|
||||
printf("connecting as new user: %s\n", new_user);
|
||||
else
|
||||
printf("connecting to new database: %s as user: %s\n",
|
||||
dbparam,new_user);
|
||||
}
|
||||
|
||||
if (PQstatus(settings->db) == CONNECTION_BAD) {
|
||||
fprintf(stderr, "%s\n", PQerrorMessage(settings->db));
|
||||
printf("reconnecting to %s\n", dbname);
|
||||
settings->db = PQsetdb(PQhost(olddb), PQport(olddb),
|
||||
NULL, NULL, dbname);
|
||||
if (PQstatus(settings->db) == CONNECTION_BAD) {
|
||||
fprintf(stderr,
|
||||
"could not reconnect to %s. exiting\n", dbname);
|
||||
exit(2);
|
||||
}
|
||||
fprintf(stderr,"Could not connect to new database. exiting\n");
|
||||
exit(2);
|
||||
} else {
|
||||
PQfinish(olddb);
|
||||
free(settings->prompt);
|
||||
|
Loading…
Reference in New Issue
Block a user