aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2016-08-23 12:00:00 -0400
committerPeter Eisentraut <peter_e@gmx.net>2016-11-13 21:44:58 -0500
commit27d2c1232879aab5636da56b698764d553b9c5c6 (patch)
tree58056a69cee5e85d91a65b53c86b8428eb763fa0 /src
parentd5d8a0b7e54ca09d0b5fdfc6afcb307450f33215 (diff)
downloadpostgresql-27d2c1232879aab5636da56b698764d553b9c5c6.tar.gz
postgresql-27d2c1232879aab5636da56b698764d553b9c5c6.zip
pg_dump: Separate table and sequence data object types
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>
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c11
-rw-r--r--src/bin/pg_dump/pg_dump.h1
-rw-r--r--src/bin/pg_dump/pg_dump_sort.c28
3 files changed, 25 insertions, 15 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 4da297f1d03..3485cabb434 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -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);
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index a60cf957335..642c4d5f7f9 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -63,6 +63,7 @@ typedef enum
DO_PROCLANG,
DO_CAST,
DO_TABLE_DATA,
+ DO_SEQUENCE_SET,
DO_DUMMY_TYPE,
DO_TSPARSER,
DO_TSDICT,
diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c
index 195b84a0d40..5b96334f496 100644
--- a/src/bin/pg_dump/pg_dump_sort.c
+++ b/src/bin/pg_dump/pg_dump_sort.c
@@ -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)",