diff options
author | Stephen Frost <sfrost@snowman.net> | 2017-05-04 22:17:52 -0400 |
---|---|---|
committer | Stephen Frost <sfrost@snowman.net> | 2017-05-04 22:17:52 -0400 |
commit | 44c528810a1eca52a7888ed74c08353d45331b00 (patch) | |
tree | 9e1914b98f31f453fea6244e8c6dda0532a913f3 /src/bin/pg_dump/common.c | |
parent | 5469e44ffc2077cb8371686497022cb5afd1af87 (diff) | |
download | postgresql-44c528810a1eca52a7888ed74c08353d45331b00.tar.gz postgresql-44c528810a1eca52a7888ed74c08353d45331b00.zip |
Change the way pg_dump retrieves partitioning info
This gets rid of the code that issued separate queries to retrieve the
partitioning parent-child relationship, parent partition key, and child
partition bound information. With this patch, the information is
retrieved instead using the queries issued from getTables() and
getInherits(), which is both more efficient than the previous approach
and doesn't require any new code.
Since the partitioning parent-child relationship is now retrieved with
the same old code that handles inheritance, partition attributes receive
a proper flagInhAttrs() treatment (that it didn't receive before), which
is needed so that the inherited NOT NULL constraints are not emitted if
we already emitted it for the parent.
Also, fix a bug in pg_dump's --binary-upgrade code, which caused pg_dump
to emit invalid command to attach a partition to its parent.
Author: Amit Langote, with some additional changes by me.
Diffstat (limited to 'src/bin/pg_dump/common.c')
-rw-r--r-- | src/bin/pg_dump/common.c | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index e2bc3576dc3..47191be86ad 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -68,8 +68,6 @@ static int numextmembers; static void flagInhTables(TableInfo *tbinfo, int numTables, InhInfo *inhinfo, int numInherits); -static void flagPartitions(TableInfo *tblinfo, int numTables, - PartInfo *partinfo, int numPartitions); static void flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables); static DumpableObject **buildIndexArray(void *objArray, int numObjs, Size objSize); @@ -77,8 +75,6 @@ static int DOCatalogIdCompare(const void *p1, const void *p2); static int ExtensionMemberIdCompare(const void *p1, const void *p2); static void findParentsByOid(TableInfo *self, InhInfo *inhinfo, int numInherits); -static void findPartitionParentByOid(TableInfo *self, PartInfo *partinfo, - int numPartitions); static int strInArray(const char *pattern, char **arr, int arr_size); @@ -97,10 +93,8 @@ getSchemaData(Archive *fout, int *numTablesPtr) NamespaceInfo *nspinfo; ExtensionInfo *extinfo; InhInfo *inhinfo; - PartInfo *partinfo; int numAggregates; int numInherits; - int numPartitions; int numRules; int numProcLangs; int numCasts; @@ -238,10 +232,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) inhinfo = getInherits(fout, &numInherits); if (g_verbose) - write_msg(NULL, "reading partition information\n"); - partinfo = getPartitions(fout, &numPartitions); - - if (g_verbose) write_msg(NULL, "reading event triggers\n"); getEventTriggers(fout, &numEventTriggers); @@ -255,11 +245,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) write_msg(NULL, "finding inheritance relationships\n"); flagInhTables(tblinfo, numTables, inhinfo, numInherits); - /* Link tables to partition parents, mark parents as interesting */ - if (g_verbose) - write_msg(NULL, "finding partition relationships\n"); - flagPartitions(tblinfo, numTables, partinfo, numPartitions); - if (g_verbose) write_msg(NULL, "reading column info for interesting tables\n"); getTableAttrs(fout, tblinfo, numTables); @@ -293,10 +278,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) getPolicies(fout, tblinfo, numTables); if (g_verbose) - write_msg(NULL, "reading partition key information for interesting tables\n"); - getTablePartitionKeyInfo(fout, tblinfo, numTables); - - if (g_verbose) write_msg(NULL, "reading publications\n"); getPublications(fout); @@ -354,43 +335,6 @@ flagInhTables(TableInfo *tblinfo, int numTables, } } -/* flagPartitions - - * Fill in parent link fields of every target table that is partition, - * and mark parents of partitions as interesting - * - * modifies tblinfo - */ -static void -flagPartitions(TableInfo *tblinfo, int numTables, - PartInfo *partinfo, int numPartitions) -{ - int i; - - for (i = 0; i < numTables; i++) - { - /* Some kinds are never partitions */ - if (tblinfo[i].relkind == RELKIND_SEQUENCE || - tblinfo[i].relkind == RELKIND_VIEW || - tblinfo[i].relkind == RELKIND_MATVIEW) - continue; - - /* Don't bother computing anything for non-target tables, either */ - if (!tblinfo[i].dobj.dump) - continue; - - /* Find the parent TableInfo and save */ - findPartitionParentByOid(&tblinfo[i], partinfo, numPartitions); - - /* Mark the parent as interesting for getTableAttrs */ - if (tblinfo[i].partitionOf) - { - tblinfo[i].partitionOf->interesting = true; - addObjectDependency(&tblinfo[i].dobj, - tblinfo[i].partitionOf->dobj.dumpId); - } - } -} - /* flagInhAttrs - * for each dumpable table in tblinfo, flag its inherited attributes * @@ -992,40 +936,6 @@ findParentsByOid(TableInfo *self, } /* - * findPartitionParentByOid - * find a partition's parent in tblinfo[] - */ -static void -findPartitionParentByOid(TableInfo *self, PartInfo *partinfo, - int numPartitions) -{ - Oid oid = self->dobj.catId.oid; - int i; - - for (i = 0; i < numPartitions; i++) - { - if (partinfo[i].partrelid == oid) - { - TableInfo *parent; - - parent = findTableByOid(partinfo[i].partparent); - if (parent == NULL) - { - write_msg(NULL, "failed sanity check, parent OID %u of table \"%s\" (OID %u) not found\n", - partinfo[i].partparent, - self->dobj.name, - oid); - exit_nicely(1); - } - self->partitionOf = parent; - - /* While we're at it, also save the partdef */ - self->partitiondef = partinfo[i].partdef; - } - } -} - -/* * parseOidArray * parse a string of numbers delimited by spaces into a character array * |