pg_dump: Separate table and sequence data object types
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 23 Aug 2016 16:00:00 +0000 (12:00 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Mon, 14 Nov 2016 02:44:58 +0000 (21:44 -0500)
Instead of handling both sequence data and table data internally as
"table data", handle sequences separately under a "sequence set" type.
We already handled materialized view data differently, so it makes the
code somewhat cleaner to handle each relation kind separately at the top
level.

This does not change the output format, since there already was a
separate "SEQUENCE SET" archive entry type.  A noticeable difference is
that SEQUENCE SET entries now always appear after TABLE DATA entries.
And in parallel mode there is less sorting to do, because the sequence
data entries are no longer considered table data.

Reviewed-by: Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h
src/bin/pg_dump/pg_dump_sort.c

index 4da297f1d033ddbcace4cf6861c064e6a6afdecc..3485cabb434a4ebd6165a5a25cda9f3b2200690a 100644 (file)
@@ -2090,6 +2090,8 @@ makeTableDataInfo(DumpOptions *dopt, TableInfo *tbinfo, bool oids)
 
    if (tbinfo->relkind == RELKIND_MATVIEW)
        tdinfo->dobj.objType = DO_REFRESH_MATVIEW;
+   else if (tbinfo->relkind == RELKIND_SEQUENCE)
+       tdinfo->dobj.objType = DO_SEQUENCE_SET;
    else
        tdinfo->dobj.objType = DO_TABLE_DATA;
 
@@ -8498,11 +8500,11 @@ dumpDumpableObject(Archive *fout, DumpableObject *dobj)
        case DO_TRANSFORM:
            dumpTransform(fout, (TransformInfo *) dobj);
            break;
+       case DO_SEQUENCE_SET:
+           dumpSequenceData(fout, (TableDataInfo *) dobj);
+           break;
        case DO_TABLE_DATA:
-           if (((TableDataInfo *) dobj)->tdtable->relkind == RELKIND_SEQUENCE)
-               dumpSequenceData(fout, (TableDataInfo *) dobj);
-           else
-               dumpTableData(fout, (TableDataInfo *) dobj);
+           dumpTableData(fout, (TableDataInfo *) dobj);
            break;
        case DO_DUMMY_TYPE:
            /* table rowtypes and array types are never dumped separately */
@@ -16226,6 +16228,7 @@ addBoundaryDependencies(DumpableObject **dobjs, int numObjs,
                addObjectDependency(preDataBound, dobj->dumpId);
                break;
            case DO_TABLE_DATA:
+           case DO_SEQUENCE_SET:
            case DO_BLOB_DATA:
                /* Data objects: must come between the boundaries */
                addObjectDependency(dobj, preDataBound->dumpId);
index a60cf9573355fc55a2a4ee8533f3a55463876a00..642c4d5f7f92841a3e16e63a5862bbfffc17c689 100644 (file)
@@ -63,6 +63,7 @@ typedef enum
    DO_PROCLANG,
    DO_CAST,
    DO_TABLE_DATA,
+   DO_SEQUENCE_SET,
    DO_DUMMY_TYPE,
    DO_TSPARSER,
    DO_TSDICT,
index 195b84a0d404eb743666b3975cc12e0776d72d57..5b96334f496402b5df053921f986f16f9b4f3b9f 100644 (file)
@@ -47,14 +47,15 @@ static const int dbObjectTypePriority[] =
    11,                         /* DO_CONVERSION */
    18,                         /* DO_TABLE */
    20,                         /* DO_ATTRDEF */
-   27,                         /* DO_INDEX */
-   28,                         /* DO_RULE */
-   29,                         /* DO_TRIGGER */
-   26,                         /* DO_CONSTRAINT */
-   30,                         /* DO_FK_CONSTRAINT */
+   28,                         /* DO_INDEX */
+   29,                         /* DO_RULE */
+   30,                         /* DO_TRIGGER */
+   27,                         /* DO_CONSTRAINT */
+   31,                         /* DO_FK_CONSTRAINT */
    2,                          /* DO_PROCLANG */
    10,                         /* DO_CAST */
    23,                         /* DO_TABLE_DATA */
+   24,                         /* DO_SEQUENCE_SET */
    19,                         /* DO_DUMMY_TYPE */
    12,                         /* DO_TSPARSER */
    14,                         /* DO_TSDICT */
@@ -62,15 +63,15 @@ static const int dbObjectTypePriority[] =
    15,                         /* DO_TSCONFIG */
    16,                         /* DO_FDW */
    17,                         /* DO_FOREIGN_SERVER */
-   31,                         /* DO_DEFAULT_ACL */
+   32,                         /* DO_DEFAULT_ACL */
    3,                          /* DO_TRANSFORM */
    21,                         /* DO_BLOB */
-   24,                         /* DO_BLOB_DATA */
+   25,                         /* DO_BLOB_DATA */
    22,                         /* DO_PRE_DATA_BOUNDARY */
-   25,                         /* DO_POST_DATA_BOUNDARY */
-   32,                         /* DO_EVENT_TRIGGER */
-   33,                         /* DO_REFRESH_MATVIEW */
-   34                          /* DO_POLICY */
+   26,                         /* DO_POST_DATA_BOUNDARY */
+   33,                         /* DO_EVENT_TRIGGER */
+   34,                         /* DO_REFRESH_MATVIEW */
+   35                          /* DO_POLICY */
 };
 
 static DumpId preDataBoundId;
@@ -1345,6 +1346,11 @@ describeDumpableObject(DumpableObject *obj, char *buf, int bufsize)
                     "TABLE DATA %s  (ID %d OID %u)",
                     obj->name, obj->dumpId, obj->catId.oid);
            return;
+       case DO_SEQUENCE_SET:
+           snprintf(buf, bufsize,
+                    "SEQUENCE SET %s  (ID %d OID %u)",
+                    obj->name, obj->dumpId, obj->catId.oid);
+           return;
        case DO_DUMMY_TYPE:
            snprintf(buf, bufsize,
                     "DUMMY TYPE %s  (ID %d OID %u)",