From: Tom Lane Date: Sun, 23 Jan 2005 00:03:54 +0000 (+0000) Subject: New routine _getObjectDescription() failed to cope with some aspects of X-Git-Tag: REL9_0_0~10902 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3e2e58ba3793a176c8c7c2b9471006e21a84846e;p=pg-rex%2Fsyncrep.git New routine _getObjectDescription() failed to cope with some aspects of pre-7.3 pg_dump archive files: namespace isn't there, and in some cases te->tag may already be quotified. Per report from Alan Pevec and followup testing. --- diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 276410742a..c79093037b 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.101 2005/01/11 05:14:10 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.102 2005/01/23 00:03:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,8 @@ static char *modulename = gettext_noop("archiver"); static ArchiveHandle *_allocAH(const char *FileSpec, const ArchiveFormat fmt, const int compression, ArchiveMode mode); -static void _getObjectDescription(PQExpBuffer buf, TocEntry *te); +static void _getObjectDescription(PQExpBuffer buf, TocEntry *te, + ArchiveHandle *AH); static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isData, bool acl_pass); @@ -2373,7 +2374,7 @@ _selectTablespace(ArchiveHandle *AH, const char *tablespace) * information used is all that's available in older dump files. */ static void -_getObjectDescription(PQExpBuffer buf, TocEntry *te) +_getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH) { const char *type = te->desc; @@ -2393,8 +2394,22 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te) strcmp(type, "TABLE") == 0 || strcmp(type, "TYPE") == 0) { - appendPQExpBuffer(buf, "%s %s", type, fmtId(te->namespace)); - appendPQExpBuffer(buf, ".%s", fmtId(te->tag)); + appendPQExpBuffer(buf, "%s ", type); + if (te->namespace && te->namespace[0]) /* is null pre-7.3 */ + appendPQExpBuffer(buf, "%s.", fmtId(te->namespace)); + /* + * Pre-7.3 pg_dump would sometimes (not always) put + * a fmtId'd name into te->tag for an index. + * This check is heuristic, so make its scope as + * narrow as possible. + */ + if (AH->version < K_VERS_1_7 && + te->tag[0] == '"' && + te->tag[strlen(te->tag)-1] == '"' && + strcmp(type, "INDEX") == 0) + appendPQExpBuffer(buf, "%s", te->tag); + else + appendPQExpBuffer(buf, "%s", fmtId(te->tag)); return; } @@ -2553,7 +2568,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat PQExpBuffer temp = createPQExpBuffer(); appendPQExpBuffer(temp, "ALTER "); - _getObjectDescription(temp, te); + _getObjectDescription(temp, te, AH); appendPQExpBuffer(temp, " OWNER TO %s;", fmtId(te->owner)); ahprintf(AH, "%s\n\n", temp->data); destroyPQExpBuffer(temp);