diff options
Diffstat (limited to 'src/bin/pg_dump/pg_backup_archiver.c')
-rw-r--r-- | src/bin/pg_dump/pg_backup_archiver.c | 154 |
1 files changed, 80 insertions, 74 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 698e7fd524e..a4786e4b62c 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.94 2004/08/20 20:00:34 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.95 2004/08/29 05:06:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,12 +47,12 @@ static char *modulename = gettext_noop("archiver"); static ArchiveHandle *_allocAH(const char *FileSpec, const ArchiveFormat fmt, const int compression, ArchiveMode mode); -static char *_getObjectFromDropStmt(const char *dropStmt, const char *type); +static char *_getObjectFromDropStmt(const char *dropStmt, const char *type); static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isData, bool acl_pass); static void fixPriorBlobRefs(ArchiveHandle *AH, TocEntry *blobte, - RestoreOptions *ropt); + RestoreOptions *ropt); static void _doSetFixedOutputState(ArchiveHandle *AH); static void _doSetSessionAuth(ArchiveHandle *AH, const char *user); static void _doSetWithOids(ArchiveHandle *AH, const bool withOids); @@ -167,7 +167,11 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt) ConnectDatabase(AHX, ropt->dbname, ropt->pghost, ropt->pgport, ropt->username, ropt->requirePassword, ropt->ignoreVersion); - /* If we're talking to the DB directly, don't send comments since they obscure SQL when displaying errors */ + + /* + * If we're talking to the DB directly, don't send comments since + * they obscure SQL when displaying errors + */ AH->noTocComments = 1; } @@ -294,7 +298,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt) /* * If we can output the data, then restore it. */ - if (AH->PrintTocDataPtr != NULL && (reqs & REQ_DATA) != 0) + if (AH->PrintTocDataPtr !=NULL && (reqs & REQ_DATA) != 0) { #ifndef HAVE_LIBZ if (AH->compression != 0) @@ -350,10 +354,10 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt) * If we just restored blobs, fix references in * previously-loaded tables; otherwise, if we * previously restored blobs, fix references in - * this table. Note that in standard cases the BLOBS - * entry comes after all TABLE DATA entries, but - * we should cope with other orders in case the - * user demands reordering. + * this table. Note that in standard cases the + * BLOBS entry comes after all TABLE DATA entries, + * but we should cope with other orders in case + * the user demands reordering. */ if (strcmp(te->desc, "BLOBS") == 0) fixPriorBlobRefs(AH, te, ropt); @@ -376,7 +380,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt) } } te = te->next; - } /* end loop over TOC entries */ + } /* end loop over TOC entries */ /* * Scan TOC again to output ownership commands and ACLs @@ -424,7 +428,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt) /* * After restoring BLOBS, fix all blob references in previously-restored - * tables. (Normally, the BLOBS entry should appear after all TABLE DATA + * tables. (Normally, the BLOBS entry should appear after all TABLE DATA * entries, so this will in fact handle all blob references.) */ static void @@ -504,8 +508,8 @@ _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *rop /* * Become superuser if possible, since they are the only ones who can - * update pg_class. If -S was not given, assume the initial user identity - * is a superuser. + * update pg_class. If -S was not given, assume the initial user + * identity is a superuser. */ _becomeUser(AH, ropt->superuser); @@ -543,8 +547,8 @@ _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt /* * Become superuser if possible, since they are the only ones who can - * update pg_class. If -S was not given, assume the initial user identity - * is a superuser. + * update pg_class. If -S was not given, assume the initial user + * identity is a superuser. */ _becomeUser(AH, ropt->superuser); @@ -650,7 +654,7 @@ ArchiveEntry(Archive *AHX, newToc->formatData = NULL; - if (AH->ArchiveEntryPtr != NULL) + if (AH->ArchiveEntryPtr !=NULL) (*AH->ArchiveEntryPtr) (AH, newToc); } @@ -664,7 +668,7 @@ PrintTOCSummary(Archive *AHX, RestoreOptions *ropt) char *fmtName; if (ropt->filename) - sav = SetOutput(AH, ropt->filename, 0 /* no compression */); + sav = SetOutput(AH, ropt->filename, 0 /* no compression */ ); ahprintf(AH, ";\n; Archive created at %s", ctime(&AH->createDate)); ahprintf(AH, "; dbname: %s\n; TOC Entries: %d\n; Compression: %d\n", @@ -942,9 +946,8 @@ archprintf(Archive *AH, const char *fmt,...) /* * This is paranoid: deal with the possibility that vsnprintf is - * willing to ignore trailing null - * or returns > 0 even if string does not fit. It may be the case that - * it returns cnt = bufsize + * willing to ignore trailing null or returns > 0 even if string does + * not fit. It may be the case that it returns cnt = bufsize */ while (cnt < 0 || cnt >= (bSize - 1)) { @@ -1236,48 +1239,45 @@ die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) /* on some error, we may decide to go on... */ void -warn_or_die_horribly(ArchiveHandle *AH, - const char *modulename, const char *fmt, ...) +warn_or_die_horribly(ArchiveHandle *AH, + const char *modulename, const char *fmt,...) { - va_list ap; + va_list ap; - switch(AH->stage) { + switch (AH->stage) + { case STAGE_NONE: /* Do nothing special */ break; case STAGE_INITIALIZING: - if (AH->stage != AH->lastErrorStage) { + if (AH->stage != AH->lastErrorStage) write_msg(modulename, "Error while INITIALIZING:\n"); - } break; case STAGE_PROCESSING: - if (AH->stage != AH->lastErrorStage) { + if (AH->stage != AH->lastErrorStage) write_msg(modulename, "Error while PROCESSING TOC:\n"); - } break; case STAGE_FINALIZING: - if (AH->stage != AH->lastErrorStage) { + if (AH->stage != AH->lastErrorStage) write_msg(modulename, "Error while FINALIZING:\n"); - } break; } - if (AH->currentTE != NULL && AH->currentTE != AH->lastErrorTE) { + if (AH->currentTE != NULL && AH->currentTE != AH->lastErrorTE) + { write_msg(modulename, "Error from TOC Entry %d; %u %u %s %s %s\n", AH->currentTE->dumpId, - AH->currentTE->catalogId.tableoid, AH->currentTE->catalogId.oid, - AH->currentTE->desc, AH->currentTE->tag, AH->currentTE->owner); + AH->currentTE->catalogId.tableoid, AH->currentTE->catalogId.oid, + AH->currentTE->desc, AH->currentTE->tag, AH->currentTE->owner); } AH->lastErrorStage = AH->stage; AH->lastErrorTE = AH->currentTE; va_start(ap, fmt); if (AH->public.exit_on_error) - { _die_horribly(AH, modulename, fmt, ap); - } else { _write_msg(modulename, fmt, ap); @@ -1312,7 +1312,6 @@ _moveBefore(ArchiveHandle *AH, TocEntry *pos, TocEntry *te) pos->prev->next = te; pos->prev = te; } - #endif static TocEntry * @@ -1689,7 +1688,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt, * later if necessary */ AH->currSchema = strdup(""); /* ditto */ AH->currWithOids = -1; /* force SET */ - + AH->toc = (TocEntry *) calloc(1, sizeof(TocEntry)); if (!AH->toc) die_horribly(AH, modulename, "out of memory\n"); @@ -1863,7 +1862,7 @@ ReadToc(ArchiveHandle *AH) /* Sanity check */ if (te->dumpId <= 0) die_horribly(AH, modulename, - "entry ID %d out of range -- perhaps a corrupt TOC\n", + "entry ID %d out of range -- perhaps a corrupt TOC\n", te->dumpId); te->hadDumper = ReadInt(AH); @@ -1901,7 +1900,7 @@ ReadToc(ArchiveHandle *AH) } else te->withOids = true; - + /* Read TOC entry dependencies */ if (AH->version >= K_VERS_1_5) { @@ -2129,7 +2128,7 @@ _doSetWithOids(ArchiveHandle *AH, const bool withOids) PQExpBuffer cmd = createPQExpBuffer(); appendPQExpBuffer(cmd, "SET default_with_oids = %s;", withOids ? - "true" : "false"); + "true" : "false"); if (RestoringToDB(AH)) { @@ -2138,7 +2137,7 @@ _doSetWithOids(ArchiveHandle *AH, const bool withOids) res = PQexec(AH->connection, cmd->data); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) - warn_or_die_horribly(AH, modulename, + warn_or_die_horribly(AH, modulename, "could not set default_with_oids: %s", PQerrorMessage(AH->connection)); @@ -2192,7 +2191,7 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname, const char *user) free(AH->currSchema); AH->currSchema = strdup(""); AH->currWithOids = -1; - + /* re-establish fixed state */ _doSetFixedOutputState(AH); } @@ -2224,7 +2223,7 @@ _becomeUser(ArchiveHandle *AH, const char *user) } /* - * Become the owner of the the given TOC entry object. If + * Become the owner of the the given TOC entry object. If * changes in ownership are not allowed, this doesn't do anything. */ static void @@ -2278,9 +2277,9 @@ _selectOutputSchema(ArchiveHandle *AH, const char *schemaName) res = PQexec(AH->connection, qry->data); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) - warn_or_die_horribly(AH, modulename, - "could not set search_path to \"%s\": %s", - schemaName, PQerrorMessage(AH->connection)); + warn_or_die_horribly(AH, modulename, + "could not set search_path to \"%s\": %s", + schemaName, PQerrorMessage(AH->connection)); PQclear(res); } @@ -2304,21 +2303,27 @@ static char * _getObjectFromDropStmt(const char *dropStmt, const char *type) { /* Chop "DROP" off the front and make a copy */ - char *first = strdup(dropStmt + 5); - char *last = first + strlen(first) - 1; /* Points to the last real char in extract */ - char *buf = NULL; + char *first = strdup(dropStmt + 5); + char *last = first + strlen(first) - 1; /* Points to the last + * real char in extract */ + char *buf = NULL; - /* Loop from the end of the string until last char is no longer '\n' or ';' */ - while (last >= first && (*last == '\n' || *last == ';')) { + /* + * Loop from the end of the string until last char is no longer '\n' + * or ';' + */ + while (last >= first && (*last == '\n' || *last == ';')) last--; - } /* Insert end of string one place after last */ *(last + 1) = '\0'; - /* Take off CASCADE if necessary. Only TYPEs seem to have this, but may - * as well check for all */ - if ((last - first) >= 8) { + /* + * Take off CASCADE if necessary. Only TYPEs seem to have this, but + * may as well check for all + */ + if ((last - first) >= 8) + { if (strcmp(last - 7, " CASCADE") == 0) last -= 8; } @@ -2329,22 +2334,22 @@ _getObjectFromDropStmt(const char *dropStmt, const char *type) /* Special case VIEWs and SEQUENCEs. They must use ALTER TABLE. */ if (strcmp(type, "VIEW") == 0 && (last - first) >= 5) { - int len = 6 + strlen(first + 5) + 1; + int len = 6 + strlen(first + 5) + 1; + buf = malloc(len); snprintf(buf, len, "TABLE %s", first + 5); - free (first); + free(first); } else if (strcmp(type, "SEQUENCE") == 0 && (last - first) >= 9) { - int len = 6 + strlen(first + 9) + 1; + int len = 6 + strlen(first + 9) + 1; + buf = malloc(len); snprintf(buf, len, "TABLE %s", first + 9); - free (first); + free(first); } else - { buf = first; - } return buf; } @@ -2352,7 +2357,7 @@ _getObjectFromDropStmt(const char *dropStmt, const char *type) static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isData, bool acl_pass) { - const char *pfx; + const char *pfx; /* ACLs are dumped only during acl pass */ if (acl_pass) @@ -2366,7 +2371,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat return; } - if (AH->noTocComments) + if (AH->noTocComments) return; /* @@ -2399,7 +2404,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat te->dumpId, te->catalogId.tableoid, te->catalogId.oid); if (te->nDeps > 0) { - int i; + int i; ahprintf(AH, "-- Dependencies:"); for (i = 0; i < te->nDeps; i++) @@ -2411,16 +2416,16 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat pfx, te->tag, te->desc, te->namespace ? te->namespace : "-", te->owner); - if (AH->PrintExtraTocPtr != NULL) + if (AH->PrintExtraTocPtr !=NULL) (*AH->PrintExtraTocPtr) (AH, te); ahprintf(AH, "--\n\n"); /* * Actually print the definition. * - * Really crude hack for suppressing AUTHORIZATION clause of CREATE SCHEMA - * when --no-owner mode is selected. This is ugly, but I see no other - * good way ... + * Really crude hack for suppressing AUTHORIZATION clause of CREATE + * SCHEMA when --no-owner mode is selected. This is ugly, but I see + * no other good way ... */ if (AH->ropt && AH->ropt->noOwner && strcmp(te->desc, "SCHEMA") == 0) { @@ -2434,10 +2439,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat /* * If we aren't using SET SESSION AUTH to determine ownership, we must - * instead issue an ALTER OWNER command. Ugly, since we have to - * cons one up based on the dropStmt. We don't need this for schemas - * (since we use CREATE SCHEMA AUTHORIZATION instead), nor for some other - * object types. + * instead issue an ALTER OWNER command. Ugly, since we have to cons + * one up based on the dropStmt. We don't need this for schemas + * (since we use CREATE SCHEMA AUTHORIZATION instead), nor for some + * other object types. */ if (!ropt->noOwner && !ropt->use_setsessauth && strlen(te->owner) > 0 && strlen(te->dropStmt) > 0 && @@ -2452,7 +2457,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat strcmp(te->desc, "VIEW") == 0 || strcmp(te->desc, "SEQUENCE") == 0)) { - char *temp = _getObjectFromDropStmt(te->dropStmt, te->desc); + char *temp = _getObjectFromDropStmt(te->dropStmt, te->desc); ahprintf(AH, "ALTER %s OWNER TO %s;\n\n", temp, fmtId(te->owner)); free(temp); @@ -2460,7 +2465,8 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat /* * If it's an ACL entry, it might contain SET SESSION AUTHORIZATION - * commands, so we can no longer assume we know the current auth setting. + * commands, so we can no longer assume we know the current auth + * setting. */ if (strncmp(te->desc, "ACL", 3) == 0) { |