mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
You might want to run pg_indent on pg_backup_db.c however ...
tom lane
This commit is contained in:
parent
83b5ae65a0
commit
69f909ba10
@ -15,7 +15,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.39 2002/01/18 17:13:50 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.40 2002/01/18 19:17:04 momjian Exp $
|
||||||
*
|
*
|
||||||
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
|
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
|
||||||
*
|
*
|
||||||
@ -64,7 +64,7 @@
|
|||||||
*
|
*
|
||||||
* Modifications - 18-Jan-2002 - pjw@rhyme.com.au
|
* Modifications - 18-Jan-2002 - pjw@rhyme.com.au
|
||||||
* - Modified _tocEntryRequired to handle '<Init>/Max OID' as a special
|
* - Modified _tocEntryRequired to handle '<Init>/Max OID' as a special
|
||||||
* case (ie. as a DATA item) as per bugs reported by Bruce Momjian
|
* case (ie. as a DATA item) as per bugs reported by Bruce Momjian
|
||||||
* around 17-Jan-2002.
|
* around 17-Jan-2002.
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
@ -1922,12 +1922,12 @@ _tocEntryRequired(TocEntry *te, RestoreOptions *ropt)
|
|||||||
res = res & ~REQ_DATA;
|
res = res & ~REQ_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Special case: <Init> type with <Max OID> name; this is part of
|
/*
|
||||||
* a DATA restore even though it has SQL.
|
* Special case: <Init> type with <Max OID> name; this is part of a
|
||||||
*/
|
* DATA restore even though it has SQL.
|
||||||
if ( ( strcmp(te->desc, "<Init>") == 0 ) && ( strcmp(te->name, "Max OID") == 0) ) {
|
*/
|
||||||
|
if ((strcmp(te->desc, "<Init>") == 0) && (strcmp(te->name, "Max OID") == 0))
|
||||||
res = REQ_DATA;
|
res = REQ_DATA;
|
||||||
}
|
|
||||||
|
|
||||||
/* Mask it if we only want schema */
|
/* Mask it if we only want schema */
|
||||||
if (ropt->schemaOnly)
|
if (ropt->schemaOnly)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* Implements the basic DB functions used by the archiver.
|
* Implements the basic DB functions used by the archiver.
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.30 2002/01/18 17:13:51 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.31 2002/01/18 19:17:05 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
*
|
*
|
||||||
@ -20,7 +20,7 @@
|
|||||||
*
|
*
|
||||||
* Modifications - 18-Jan-2002 - pjw@rhyme.com.au
|
* Modifications - 18-Jan-2002 - pjw@rhyme.com.au
|
||||||
*
|
*
|
||||||
* - Split ExecuteSqlCommandBuf into 3 routines for (slightly) improved
|
* - Split ExecuteSqlCommandBuf into 3 routines for (slightly) improved
|
||||||
* clarity. Modify loop to cater for COPY commands buried in the SQL
|
* clarity. Modify loop to cater for COPY commands buried in the SQL
|
||||||
* command buffer (prev version assumed COPY command was executed
|
* command buffer (prev version assumed COPY command was executed
|
||||||
* in prior call). This was to fix the buf in the 'set max oid' code.
|
* in prior call). This was to fix the buf in the 'set max oid' code.
|
||||||
@ -51,8 +51,8 @@ static void _check_database_version(ArchiveHandle *AH, bool ignoreVersion);
|
|||||||
static PGconn *_connectDB(ArchiveHandle *AH, const char *newdbname, const char *newUser);
|
static PGconn *_connectDB(ArchiveHandle *AH, const char *newdbname, const char *newUser);
|
||||||
static int _executeSqlCommand(ArchiveHandle *AH, PGconn *conn, PQExpBuffer qry, char *desc);
|
static int _executeSqlCommand(ArchiveHandle *AH, PGconn *conn, PQExpBuffer qry, char *desc);
|
||||||
static void notice_processor(void *arg, const char *message);
|
static void notice_processor(void *arg, const char *message);
|
||||||
static char* _sendSQLLine( ArchiveHandle *AH, char *qry, char *eos);
|
static char *_sendSQLLine(ArchiveHandle *AH, char *qry, char *eos);
|
||||||
static char* _sendCopyLine( ArchiveHandle *AH, char *qry, char *eos);
|
static char *_sendCopyLine(ArchiveHandle *AH, char *qry, char *eos);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -544,23 +544,24 @@ _executeSqlCommand(ArchiveHandle *AH, PGconn *conn, PQExpBuffer qry, char *desc)
|
|||||||
return strlen(qry->data);
|
return strlen(qry->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used by ExecuteSqlCommandBuf to send one buffered line when running a COPY command.
|
* Used by ExecuteSqlCommandBuf to send one buffered line when running a COPY command.
|
||||||
*/
|
*/
|
||||||
static char*
|
static char *
|
||||||
_sendCopyLine( ArchiveHandle *AH, char *qry, char *eos)
|
_sendCopyLine(ArchiveHandle *AH, char *qry, char *eos)
|
||||||
{
|
{
|
||||||
int loc; /* Location of next newline */
|
int loc; /* Location of next newline */
|
||||||
int pos = 0; /* Current position */
|
int pos = 0; /* Current position */
|
||||||
int sPos = 0; /* Last pos of a slash char */
|
int sPos = 0; /* Last pos of a slash char */
|
||||||
int isEnd = 0;
|
int isEnd = 0;
|
||||||
|
|
||||||
/* loop to find unquoted newline ending the line of COPY data */
|
/* loop to find unquoted newline ending the line of COPY data */
|
||||||
for (;;) {
|
for (;;)
|
||||||
|
{
|
||||||
loc = strcspn(&qry[pos], "\n") + pos;
|
loc = strcspn(&qry[pos], "\n") + pos;
|
||||||
|
|
||||||
/* If no match, then wait */
|
/* If no match, then wait */
|
||||||
if (loc >= (eos - qry)) /* None found */
|
if (loc >= (eos - qry)) /* None found */
|
||||||
{
|
{
|
||||||
appendBinaryPQExpBuffer(AH->pgCopyBuf, qry, (eos - qry));
|
appendBinaryPQExpBuffer(AH->pgCopyBuf, qry, (eos - qry));
|
||||||
return eos;
|
return eos;
|
||||||
@ -579,8 +580,8 @@ _sendCopyLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
sPos = loc - sPos;
|
sPos = loc - sPos;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If an odd number of preceding slashes, then \n was escaped
|
* If an odd number of preceding slashes, then \n was escaped so
|
||||||
* so set the next search pos, and loop (if any left).
|
* set the next search pos, and loop (if any left).
|
||||||
*/
|
*/
|
||||||
if ((sPos & 1) == 1)
|
if ((sPos & 1) == 1)
|
||||||
{
|
{
|
||||||
@ -591,9 +592,9 @@ _sendCopyLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
appendBinaryPQExpBuffer(AH->pgCopyBuf, qry, (eos - qry));
|
appendBinaryPQExpBuffer(AH->pgCopyBuf, qry, (eos - qry));
|
||||||
return eos;
|
return eos;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We found an unquoted newline */
|
/* We found an unquoted newline */
|
||||||
@ -613,8 +614,7 @@ _sendCopyLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
resetPQExpBuffer(AH->pgCopyBuf);
|
resetPQExpBuffer(AH->pgCopyBuf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fprintf(stderr, "Buffer is '%s'\n",
|
* fprintf(stderr, "Buffer is '%s'\n", AH->pgCopyBuf->data);
|
||||||
* AH->pgCopyBuf->data);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (isEnd)
|
if (isEnd)
|
||||||
@ -628,24 +628,23 @@ _sendCopyLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
return qry + loc + 1;
|
return qry + loc + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used by ExecuteSqlCommandBuf to send one buffered line of SQL (not data for the copy command).
|
* Used by ExecuteSqlCommandBuf to send one buffered line of SQL (not data for the copy command).
|
||||||
*/
|
*/
|
||||||
static char*
|
static char *
|
||||||
_sendSQLLine( ArchiveHandle *AH, char *qry, char *eos)
|
_sendSQLLine(ArchiveHandle *AH, char *qry, char *eos)
|
||||||
{
|
{
|
||||||
int pos = 0; /* Current position */
|
int pos = 0; /* Current position */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following is a mini state machine to assess the end of an
|
* The following is a mini state machine to assess the end of an SQL
|
||||||
* SQL statement. It really only needs to parse good SQL, or at
|
* statement. It really only needs to parse good SQL, or at least
|
||||||
* least that's the theory... End-of-statement is assumed to be an
|
* that's the theory... End-of-statement is assumed to be an unquoted,
|
||||||
* unquoted, un commented semi-colon.
|
* un commented semi-colon.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fprintf(stderr, "Buffer at start is: '%s'\n\n",
|
* fprintf(stderr, "Buffer at start is: '%s'\n\n", AH->sqlBuf->data);
|
||||||
* AH->sqlBuf->data);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (pos = 0; pos < (eos - qry); pos++)
|
for (pos = 0; pos < (eos - qry); pos++)
|
||||||
@ -656,7 +655,7 @@ _sendSQLLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
switch (AH->sqlparse.state)
|
switch (AH->sqlparse.state)
|
||||||
{
|
{
|
||||||
|
|
||||||
case SQL_SCAN: /* Default state == 0, set in _allocAH */
|
case SQL_SCAN: /* Default state == 0, set in _allocAH */
|
||||||
|
|
||||||
if (qry[pos] == ';' && AH->sqlparse.braceDepth == 0)
|
if (qry[pos] == ';' && AH->sqlparse.braceDepth == 0)
|
||||||
{
|
{
|
||||||
@ -670,11 +669,12 @@ _sendSQLLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
resetPQExpBuffer(AH->sqlBuf);
|
resetPQExpBuffer(AH->sqlBuf);
|
||||||
AH->sqlparse.lastChar = '\0';
|
AH->sqlparse.lastChar = '\0';
|
||||||
|
|
||||||
/* Remove any following newlines - so that embedded COPY commands don't get a
|
/*
|
||||||
* starting newline.
|
* Remove any following newlines - so that embedded
|
||||||
|
* COPY commands don't get a starting newline.
|
||||||
*/
|
*/
|
||||||
pos++;
|
pos++;
|
||||||
for ( ; pos < (eos - qry) && qry[pos] == '\n' ; pos++ ) ;
|
for (; pos < (eos - qry) && qry[pos] == '\n'; pos++);
|
||||||
|
|
||||||
/* We've got our line, so exit */
|
/* We've got our line, so exit */
|
||||||
return qry + pos;
|
return qry + pos;
|
||||||
@ -741,8 +741,11 @@ _sendSQLLine( ArchiveHandle *AH, char *qry, char *eos)
|
|||||||
/* fprintf(stderr, "\n"); */
|
/* fprintf(stderr, "\n"); */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we get here, we've processed entire string with no complete SQL stmt */
|
/*
|
||||||
return eos;
|
* If we get here, we've processed entire string with no complete SQL
|
||||||
|
* stmt
|
||||||
|
*/
|
||||||
|
return eos;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,11 +765,10 @@ ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qryv, int bufLen)
|
|||||||
/* Could switch between command and COPY IN mode at each line */
|
/* Could switch between command and COPY IN mode at each line */
|
||||||
while (qry < eos)
|
while (qry < eos)
|
||||||
{
|
{
|
||||||
if (AH->pgCopyIn) {
|
if (AH->pgCopyIn)
|
||||||
qry = _sendCopyLine(AH, qry, eos);
|
qry = _sendCopyLine(AH, qry, eos);
|
||||||
} else {
|
else
|
||||||
qry = _sendSQLLine(AH, qry, eos);
|
qry = _sendSQLLine(AH, qry, eos);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.237 2002/01/11 23:21:55 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.238 2002/01/18 19:17:05 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -2035,7 +2035,7 @@ getFuncs(int *numFuncs)
|
|||||||
* numTables is set to the number of tables read in
|
* numTables is set to the number of tables read in
|
||||||
*/
|
*/
|
||||||
TableInfo *
|
TableInfo *
|
||||||
getTables(int *numTables, FuncInfo *finfo, int numFuncs, const char* tablename)
|
getTables(int *numTables, FuncInfo *finfo, int numFuncs, const char *tablename)
|
||||||
{
|
{
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
int ntups;
|
int ntups;
|
||||||
@ -2127,14 +2127,15 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs, const char* tablename)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* First pass: extract data from result and lock tables. We do the
|
* First pass: extract data from result and lock tables. We do the
|
||||||
* locking before anything else, to minimize the window wherein a table
|
* locking before anything else, to minimize the window wherein a
|
||||||
* could disappear under us.
|
* table could disappear under us.
|
||||||
*
|
*
|
||||||
* Note that we have to collect info about all tables here, even when
|
* Note that we have to collect info about all tables here, even when
|
||||||
* dumping only one, because we don't know which tables might be
|
* dumping only one, because we don't know which tables might be
|
||||||
* inheritance ancestors of the target table. Possible future
|
* inheritance ancestors of the target table. Possible future
|
||||||
* improvement: suppress later collection of schema info about tables
|
* improvement: suppress later collection of schema info about tables
|
||||||
* that are determined not to be either targets or ancestors of targets.
|
* that are determined not to be either targets or ancestors of
|
||||||
|
* targets.
|
||||||
*/
|
*/
|
||||||
tblinfo = (TableInfo *) malloc(ntups * sizeof(TableInfo));
|
tblinfo = (TableInfo *) malloc(ntups * sizeof(TableInfo));
|
||||||
|
|
||||||
@ -2167,26 +2168,27 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs, const char* tablename)
|
|||||||
*
|
*
|
||||||
* If no target tablename was specified, lock all tables we see,
|
* If no target tablename was specified, lock all tables we see,
|
||||||
* otherwise lock only the specified table. (This is incomplete
|
* otherwise lock only the specified table. (This is incomplete
|
||||||
* because we'll still try to collect schema info about all tables,
|
* because we'll still try to collect schema info about all
|
||||||
* and could possibly lose during that phase. But for the typical
|
* tables, and could possibly lose during that phase. But for the
|
||||||
* use where we're dumping all tables anyway, it matters not.)
|
* typical use where we're dumping all tables anyway, it matters
|
||||||
|
* not.)
|
||||||
*
|
*
|
||||||
* NOTE: it'd be kinda nice to lock views and sequences too, not
|
* NOTE: it'd be kinda nice to lock views and sequences too, not only
|
||||||
* only plain tables, but the backend doesn't presently allow that.
|
* plain tables, but the backend doesn't presently allow that.
|
||||||
*/
|
*/
|
||||||
if ((tblinfo[i].relkind == RELKIND_RELATION) &&
|
if ((tblinfo[i].relkind == RELKIND_RELATION) &&
|
||||||
(tablename == NULL || strcmp(tblinfo[i].relname, tablename) == 0))
|
(tablename == NULL || strcmp(tblinfo[i].relname, tablename) == 0))
|
||||||
{
|
{
|
||||||
PGresult *lres;
|
PGresult *lres;
|
||||||
|
|
||||||
resetPQExpBuffer(lockquery);
|
resetPQExpBuffer(lockquery);
|
||||||
appendPQExpBuffer(lockquery,
|
appendPQExpBuffer(lockquery,
|
||||||
"LOCK TABLE %s IN ACCESS SHARE MODE",
|
"LOCK TABLE %s IN ACCESS SHARE MODE",
|
||||||
fmtId(tblinfo[i].relname, force_quotes));
|
fmtId(tblinfo[i].relname, force_quotes));
|
||||||
lres = PQexec(g_conn,lockquery->data);
|
lres = PQexec(g_conn, lockquery->data);
|
||||||
if (!lres || PQresultStatus(lres) != PGRES_COMMAND_OK)
|
if (!lres || PQresultStatus(lres) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
write_msg(NULL, "Attempt to lock table \"%s\" failed. %s",
|
write_msg(NULL, "Attempt to lock table \"%s\" failed. %s",
|
||||||
tblinfo[i].relname, PQerrorMessage(g_conn));
|
tblinfo[i].relname, PQerrorMessage(g_conn));
|
||||||
exit_nicely();
|
exit_nicely();
|
||||||
}
|
}
|
||||||
@ -2198,8 +2200,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs, const char* tablename)
|
|||||||
res = NULL;
|
res = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Second pass: pick up additional information about each table,
|
* Second pass: pick up additional information about each table, as
|
||||||
* as required.
|
* required.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < *numTables; i++)
|
for (i = 0; i < *numTables; i++)
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.32 2002/01/10 01:11:45 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.33 2002/01/18 19:17:05 momjian Exp $
|
||||||
*
|
*
|
||||||
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
|
* Modifications - 28-Jun-2000 - pjw@rhyme.com.au
|
||||||
*
|
*
|
||||||
@ -393,7 +393,7 @@ usage(const char *progname)
|
|||||||
" -F, --format={c|t} specify backup file format\n"
|
" -F, --format={c|t} specify backup file format\n"
|
||||||
" -h, --host=HOSTNAME server host name\n"
|
" -h, --host=HOSTNAME server host name\n"
|
||||||
" -i, --index=NAME restore named index\n"
|
" -i, --index=NAME restore named index\n"
|
||||||
" -l, --list print summarized TOC of the archive\n"
|
" -l, --list print summarized TOC of the archive\n"
|
||||||
" -L, --use-list=FILENAME use specified table of contents for ordering\n"
|
" -L, --use-list=FILENAME use specified table of contents for ordering\n"
|
||||||
" output from this file\n"
|
" output from this file\n"
|
||||||
" -N, --orig-order restore in original dump order\n"
|
" -N, --orig-order restore in original dump order\n"
|
||||||
@ -429,12 +429,12 @@ usage(const char *progname)
|
|||||||
" -F {c|t} specify backup file format\n"
|
" -F {c|t} specify backup file format\n"
|
||||||
" -h HOSTNAME server host name\n"
|
" -h HOSTNAME server host name\n"
|
||||||
" -i NAME restore named index\n"
|
" -i NAME restore named index\n"
|
||||||
" -l print summarized TOC of the archive\n"
|
" -l print summarized TOC of the archive\n"
|
||||||
" -L FILENAME use specified table of contents for ordering\n"
|
" -L FILENAME use specified table of contents for ordering\n"
|
||||||
" output from this file\n"
|
" output from this file\n"
|
||||||
" -N restore in original dump order\n"
|
" -N restore in original dump order\n"
|
||||||
" -o restore in OID order\n"
|
" -o restore in OID order\n"
|
||||||
" -O do not reconnect to database to match\n"
|
" -O do not reconnect to database to match\n"
|
||||||
" object owner\n"
|
" object owner\n"
|
||||||
" -p PORT server port number\n"
|
" -p PORT server port number\n"
|
||||||
" -P NAME restore named function\n"
|
" -P NAME restore named function\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user