]> granicus.if.org Git - postgresql/commitdiff
pg_dump: store unused attribs as NULL instead of '\0'
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 26 Apr 2019 16:03:59 +0000 (12:03 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 26 Apr 2019 16:05:17 +0000 (12:05 -0400)
Commit f831d4accda0 changed pg_dump to emit (and pg_restore to
understand) NULLs for unused members in ArchiveEntry structs, as a side
effect of some code beautification.  That broke pg_restore of dumps
generated with older pg_dump, however, so it was reverted in
19455c9f5606.  Since the archiver version number has been bumped in
3b925e905de3, we can put it back.

Author: Dmitry Dolgov
Discussion: https://postgr.es/m/CA+q6zcXx0XHqLsFJLaUU2j5BDiBAHig=YRoBC_YVq7VJGvzBEA@mail.gmail.com

src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_backup_archiver.h
src/bin/pg_dump/pg_dump.c

index fc1d8222446d158f345fce1ba98805c8908c6e35..821fb4def05f9a1f3e93b557bed609cc13e16a40 100644 (file)
@@ -1087,10 +1087,10 @@ ArchiveEntry(Archive *AHX, CatalogId catalogId, DumpId dumpId,
        newToc->namespace = opts->namespace ? pg_strdup(opts->namespace) : NULL;
        newToc->tablespace = opts->tablespace ? pg_strdup(opts->tablespace) : NULL;
        newToc->tableam = opts->tableam ? pg_strdup(opts->tableam) : NULL;
-       newToc->owner = pg_strdup(opts->owner);
+       newToc->owner = opts->owner ? pg_strdup(opts->owner) : NULL;
        newToc->desc = pg_strdup(opts->description);
-       newToc->defn = pg_strdup(opts->createStmt);
-       newToc->dropStmt = pg_strdup(opts->dropStmt);
+       newToc->defn = opts->createStmt ? pg_strdup(opts->createStmt) : NULL;
+       newToc->dropStmt = opts->dropStmt ? pg_strdup(opts->dropStmt) : NULL;
        newToc->copyStmt = opts->copyStmt ? pg_strdup(opts->copyStmt) : NULL;
 
        if (opts->nDeps > 0)
@@ -3621,7 +3621,7 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData)
        }
        else
        {
-               if (strlen(te->defn) > 0)
+               if (te->defn && strlen(te->defn) > 0)
                        ahprintf(AH, "%s\n\n", te->defn);
        }
 
@@ -3632,7 +3632,8 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData)
         * with DROP commands must appear in one list or the other.
         */
        if (!ropt->noOwner && !ropt->use_setsessauth &&
-               strlen(te->owner) > 0 && strlen(te->dropStmt) > 0)
+               te->owner && strlen(te->owner) > 0 &&
+               te->dropStmt && strlen(te->dropStmt) > 0)
        {
                if (strcmp(te->desc, "AGGREGATE") == 0 ||
                        strcmp(te->desc, "BLOB") == 0 ||
index fe72d5b13bca4d4c1fb5e1e7c4dc5b3c8b68d904..f3905c00fd807f5cdaa60f9ff246a6abaab54480 100644 (file)
@@ -96,12 +96,7 @@ typedef z_stream *z_streamp;
                                                                                                         * behavior */
 #define K_VERS_1_14 MAKE_ARCHIVE_VERSION(1, 14, 0)     /* add tableam */
 
-/*
- * Current archive version number (the format we can output)
- *
- * Note: If you update the current archive version, consider
- * https://postgr.es/m/20190227123217.GA27552@alvherre.pgsql
- */
+/* Current archive version number (the format we can output) */
 #define K_VERS_MAJOR 1
 #define K_VERS_MINOR 14
 #define K_VERS_REV 0
index 6521e14f497e2360610bbc63d72e4feb1b88d05e..bfc9a32afe79c54b845d1468497fffbadcf633ea 100644 (file)
@@ -2244,8 +2244,6 @@ dumpTableData(Archive *fout, TableDataInfo *tdinfo)
                                                                           .owner = tbinfo->rolname,
                                                                           .description = "TABLE DATA",
                                                                           .section = SECTION_DATA,
-                                                                          .createStmt = "",
-                                                                          .dropStmt = "",
                                                                           .copyStmt = copyStmt,
                                                                           .deps = &(tbinfo->dobj.dumpId),
                                                                           .nDeps = 1,
@@ -2300,7 +2298,6 @@ refreshMatViewData(Archive *fout, TableDataInfo *tdinfo)
                                                                  .description = "MATERIALIZED VIEW DATA",
                                                                  .section = SECTION_POST_DATA,
                                                                  .createStmt = q->data,
-                                                                 .dropStmt = "",
                                                                  .deps = tdinfo->dobj.dependencies,
                                                                  .nDeps = tdinfo->dobj.nDeps));
 
@@ -2865,7 +2862,6 @@ dumpDatabase(Archive *fout)
                                                                          .description = "COMMENT",
                                                                          .section = SECTION_NONE,
                                                                          .createStmt = dbQry->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &dbDumpId,
                                                                          .nDeps = 1));
                }
@@ -2895,7 +2891,6 @@ dumpDatabase(Archive *fout)
                                                                          .description = "SECURITY LABEL",
                                                                          .section = SECTION_NONE,
                                                                          .createStmt = seclabelQry->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &dbDumpId,
                                                                          .nDeps = 1));
                destroyPQExpBuffer(seclabelQry);
@@ -3012,10 +3007,8 @@ dumpDatabase(Archive *fout)
                ArchiveEntry(fout, nilCatalogId, createDumpId(),
                                         ARCHIVE_OPTS(.tag = "pg_largeobject",
                                                                  .description = "pg_largeobject",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
-                                                                 .createStmt = loOutQry->data,
-                                                                 .dropStmt = ""));
+                                                                 .createStmt = loOutQry->data));
 
                PQclear(lo_res);
 
@@ -3122,10 +3115,8 @@ dumpEncoding(Archive *AH)
        ArchiveEntry(AH, nilCatalogId, createDumpId(),
                                 ARCHIVE_OPTS(.tag = "ENCODING",
                                                          .description = "ENCODING",
-                                                         .owner = "",
                                                          .section = SECTION_PRE_DATA,
-                                                         .createStmt = qry->data,
-                                                         .dropStmt = ""));
+                                                         .createStmt = qry->data));
 
        destroyPQExpBuffer(qry);
 }
@@ -3149,10 +3140,8 @@ dumpStdStrings(Archive *AH)
        ArchiveEntry(AH, nilCatalogId, createDumpId(),
                                 ARCHIVE_OPTS(.tag = "STDSTRINGS",
                                                          .description = "STDSTRINGS",
-                                                         .owner = "",
                                                          .section = SECTION_PRE_DATA,
-                                                         .createStmt = qry->data,
-                                                         .dropStmt = ""));
+                                                         .createStmt = qry->data));
 
        destroyPQExpBuffer(qry);
 }
@@ -3205,10 +3194,8 @@ dumpSearchPath(Archive *AH)
        ArchiveEntry(AH, nilCatalogId, createDumpId(),
                                 ARCHIVE_OPTS(.tag = "SEARCHPATH",
                                                          .description = "SEARCHPATH",
-                                                         .owner = "",
                                                          .section = SECTION_PRE_DATA,
-                                                         .createStmt = qry->data,
-                                                         .dropStmt = ""));
+                                                         .createStmt = qry->data));
 
        /* Also save it in AH->searchpath, in case we're doing plain text dump */
        AH->searchpath = pg_strdup(qry->data);
@@ -3684,7 +3671,6 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
                                                                          .description = "ROW SECURITY",
                                                                          .section = SECTION_POST_DATA,
                                                                          .createStmt = query->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &(tbinfo->dobj.dumpId),
                                                                          .nDeps = 1));
 
@@ -4051,10 +4037,8 @@ dumpPublicationTable(Archive *fout, PublicationRelInfo *pubrinfo)
                                 ARCHIVE_OPTS(.tag = tag,
                                                          .namespace = tbinfo->dobj.namespace->dobj.name,
                                                          .description = "PUBLICATION TABLE",
-                                                         .owner = "",
                                                          .section = SECTION_POST_DATA,
-                                                         .createStmt = query->data,
-                                                         .dropStmt = ""));
+                                                         .createStmt = query->data));
 
        free(tag);
        destroyPQExpBuffer(query);
@@ -9502,7 +9486,6 @@ dumpComment(Archive *fout, const char *type, const char *name,
                                                                  .description = "COMMENT",
                                                                  .section = SECTION_NONE,
                                                                  .createStmt = query->data,
-                                                                 .dropStmt = "",
                                                                  .deps = &dumpId,
                                                                  .nDeps = 1));
 
@@ -9572,7 +9555,6 @@ dumpTableComment(Archive *fout, TableInfo *tbinfo,
                                                                          .description = "COMMENT",
                                                                          .section = SECTION_NONE,
                                                                          .createStmt = query->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &(tbinfo->dobj.dumpId),
                                                                          .nDeps = 1));
                }
@@ -9598,7 +9580,6 @@ dumpTableComment(Archive *fout, TableInfo *tbinfo,
                                                                          .description = "COMMENT",
                                                                          .section = SECTION_NONE,
                                                                          .createStmt = query->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &(tbinfo->dobj.dumpId),
                                                                          .nDeps = 1));
                }
@@ -9879,11 +9860,8 @@ dumpDumpableObject(Archive *fout, DumpableObject *dobj)
                                te = ArchiveEntry(fout, dobj->catId, dobj->dumpId,
                                                                  ARCHIVE_OPTS(.tag = dobj->name,
                                                                                           .description = "BLOBS",
-                                                                                          .owner = "",
                                                                                           .section = SECTION_DATA,
-                                                                                          .dumpFn = dumpBlobs,
-                                                                                          .createStmt = "",
-                                                                                          .dropStmt = ""));
+                                                                                          .dumpFn = dumpBlobs));
 
                                /*
                                 * Set the TocEntry's dataLength in case we are doing a
@@ -10088,7 +10066,6 @@ dumpExtension(Archive *fout, ExtensionInfo *extinfo)
                ArchiveEntry(fout, extinfo->dobj.catId, extinfo->dobj.dumpId,
                                         ARCHIVE_OPTS(.tag = extinfo->dobj.name,
                                                                  .description = "EXTENSION",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = q->data,
                                                                  .dropStmt = delq->data));
@@ -11232,7 +11209,6 @@ dumpCompositeTypeColComments(Archive *fout, TypeInfo *tyinfo)
                                                                          .description = "COMMENT",
                                                                          .section = SECTION_NONE,
                                                                          .createStmt = query->data,
-                                                                         .dropStmt = "",
                                                                          .deps = &(tyinfo->dobj.dumpId),
                                                                          .nDeps = 1));
                }
@@ -11288,8 +11264,7 @@ dumpShellType(Archive *fout, ShellTypeInfo *stinfo)
                                                                  .owner = stinfo->baseType->rolname,
                                                                  .description = "SHELL TYPE",
                                                                  .section = SECTION_PRE_DATA,
-                                                                 .createStmt = q->data,
-                                                                 .dropStmt = ""));
+                                                                 .createStmt = q->data));
 
        destroyPQExpBuffer(q);
 }
@@ -12234,7 +12209,6 @@ dumpCast(Archive *fout, CastInfo *cast)
                ArchiveEntry(fout, cast->dobj.catId, cast->dobj.dumpId,
                                         ARCHIVE_OPTS(.tag = labelq->data,
                                                                  .description = "CAST",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = defqry->data,
                                                                  .dropStmt = delqry->data));
@@ -12362,7 +12336,6 @@ dumpTransform(Archive *fout, TransformInfo *transform)
                ArchiveEntry(fout, transform->dobj.catId, transform->dobj.dumpId,
                                         ARCHIVE_OPTS(.tag = labelq->data,
                                                                  .description = "TRANSFORM",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = defqry->data,
                                                                  .dropStmt = delqry->data,
@@ -12749,7 +12722,6 @@ dumpAccessMethod(Archive *fout, AccessMethodInfo *aminfo)
                ArchiveEntry(fout, aminfo->dobj.catId, aminfo->dobj.dumpId,
                                         ARCHIVE_OPTS(.tag = aminfo->dobj.name,
                                                                  .description = "ACCESS METHOD",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = q->data,
                                                                  .dropStmt = delq->data));
@@ -14211,7 +14183,6 @@ dumpTSParser(Archive *fout, TSParserInfo *prsinfo)
                                         ARCHIVE_OPTS(.tag = prsinfo->dobj.name,
                                                                  .namespace = prsinfo->dobj.namespace->dobj.name,
                                                                  .description = "TEXT SEARCH PARSER",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = q->data,
                                                                  .dropStmt = delq->data));
@@ -14350,7 +14321,6 @@ dumpTSTemplate(Archive *fout, TSTemplateInfo *tmplinfo)
                                         ARCHIVE_OPTS(.tag = tmplinfo->dobj.name,
                                                                  .namespace = tmplinfo->dobj.namespace->dobj.name,
                                                                  .description = "TEXT SEARCH TEMPLATE",
-                                                                 .owner = "",
                                                                  .section = SECTION_PRE_DATA,
                                                                  .createStmt = q->data,
                                                                  .dropStmt = delq->data));
@@ -14819,8 +14789,7 @@ dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo)
                                                                  .owner = daclinfo->defaclrole,
                                                                  .description = "DEFAULT ACL",
                                                                  .section = SECTION_POST_DATA,
-                                                                 .createStmt = q->data,
-                                                                 .dropStmt = ""));
+                                                                 .createStmt = q->data));
 
        destroyPQExpBuffer(tag);
        destroyPQExpBuffer(q);
@@ -14916,7 +14885,6 @@ dumpACL(Archive *fout, CatalogId objCatId, DumpId objDumpId,
                                                                  .description = "ACL",
                                                                  .section = SECTION_NONE,
                                                                  .createStmt = sql->data,
-                                                                 .dropStmt = "",
                                                                  .deps = &objDumpId,
                                                                  .nDeps = 1));
                destroyPQExpBuffer(tag);
@@ -15006,7 +14974,6 @@ dumpSecLabel(Archive *fout, const char *type, const char *name,
                                                                  .description = "SECURITY LABEL",
                                                                  .section = SECTION_NONE,
                                                                  .createStmt = query->data,
-                                                                 .dropStmt = "",
                                                                  .deps = &dumpId,
                                                                  .nDeps = 1));
                destroyPQExpBuffer(tag);
@@ -15090,7 +15057,6 @@ dumpTableSecLabel(Archive *fout, TableInfo *tbinfo, const char *reltypename)
                                                                  .description = "SECURITY LABEL",
                                                                  .section = SECTION_NONE,
                                                                  .createStmt = query->data,
-                                                                 .dropStmt = "",
                                                                  .deps = &(tbinfo->dobj.dumpId),
                                                                  .nDeps = 1));
        }
@@ -16438,10 +16404,8 @@ dumpIndexAttach(Archive *fout, IndexAttachInfo *attachinfo)
                                         ARCHIVE_OPTS(.tag = attachinfo->dobj.name,
                                                                  .namespace = attachinfo->dobj.namespace->dobj.name,
                                                                  .description = "INDEX ATTACH",
-                                                                 .owner = "",
                                                                  .section = SECTION_POST_DATA,
-                                                                 .createStmt = q->data,
-                                                                 .dropStmt = ""));
+                                                                 .createStmt = q->data));
 
                destroyPQExpBuffer(q);
        }
@@ -17071,7 +17035,6 @@ dumpSequence(Archive *fout, TableInfo *tbinfo)
                                                                                  .description = "SEQUENCE OWNED BY",
                                                                                  .section = SECTION_PRE_DATA,
                                                                                  .createStmt = query->data,
-                                                                                 .dropStmt = "",
                                                                                  .deps = &(tbinfo->dobj.dumpId),
                                                                                  .nDeps = 1));
                }
@@ -17140,7 +17103,6 @@ dumpSequenceData(Archive *fout, TableDataInfo *tdinfo)
                                                                  .description = "SEQUENCE SET",
                                                                  .section = SECTION_DATA,
                                                                  .createStmt = query->data,
-                                                                 .dropStmt = "",
                                                                  .deps = &(tbinfo->dobj.dumpId),
                                                                  .nDeps = 1));