20 #include "catalog/pg_class_d.h"
21 #include "catalog/pg_collation_d.h"
22 #include "catalog/pg_extension_d.h"
23 #include "catalog/pg_namespace_d.h"
24 #include "catalog/pg_operator_d.h"
25 #include "catalog/pg_proc_d.h"
26 #include "catalog/pg_publication_d.h"
27 #include "catalog/pg_subscription_d.h"
28 #include "catalog/pg_type_d.h"
67 #define SH_PREFIX catalogid
68 #define SH_ELEMENT_TYPE CatalogIdMapEntry
69 #define SH_KEY_TYPE CatalogId
71 #define SH_HASH_KEY(tb, key) hash_bytes((const unsigned char *) &(key), sizeof(CatalogId))
72 #define SH_EQUAL(tb, a, b) ((a).oid == (b).oid && (a).tableoid == (b).tableoid)
74 #define SH_GET_HASH(tb, a) (a)->hashval
75 #define SH_SCOPE static inline
76 #define SH_RAW_ALLOCATOR pg_malloc0
81 #define CATALOGIDHASH_INITIAL_SIZE 10000
86 InhInfo *inhinfo,
int numInherits);
90 static int strInArray(
const char *pattern,
char **arr,
int arr_size);
118 int numAccessMethods;
126 int numForeignDataWrappers;
127 int numForeignServers;
129 int numEventTriggers;
167 pg_log_info(
"reading user-defined aggregate functions");
173 pg_log_info(
"reading user-defined access methods");
176 pg_log_info(
"reading user-defined operator classes");
179 pg_log_info(
"reading user-defined operator families");
182 pg_log_info(
"reading user-defined text search parsers");
185 pg_log_info(
"reading user-defined text search templates");
188 pg_log_info(
"reading user-defined text search dictionaries");
191 pg_log_info(
"reading user-defined text search configurations");
194 pg_log_info(
"reading user-defined foreign-data wrappers");
197 pg_log_info(
"reading user-defined foreign servers");
215 pg_log_info(
"reading table inheritance information");
227 flagInhTables(fout, tblinfo, numTables, inhinfo, numInherits);
229 pg_log_info(
"reading column info for interesting tables");
232 pg_log_info(
"flagging inherited columns in subtables");
241 pg_log_info(
"flagging indexes in partitioned tables");
262 pg_log_info(
"reading publication membership of tables");
265 pg_log_info(
"reading publication membership of schemas");
271 pg_log_info(
"reading subscription membership of tables");
276 *numTablesPtr = numTables;
294 InhInfo *inhinfo,
int numInherits)
309 for (
i = 0;
i < numInherits;
i++)
329 if (parent == NULL ||
334 pg_fatal(
"failed sanity check, parent OID %u of table \"%s\" (OID %u) not found",
335 inhinfo[
i].inhparent,
352 for (
i = 0;
i < numTables;
i++)
359 if (tblinfo[
i].dobj.dump)
364 for (
j = 0;
j < numParents;
j++)
365 parents[
j]->interesting =
true;
375 if (tblinfo[
i].numParents != 1)
376 pg_fatal(
"invalid number of parents %d for table \"%s\"",
377 tblinfo[
i].numParents,
378 tblinfo[
i].dobj.name);
386 attachinfo->
dobj.namespace = tblinfo[
i].
dobj.namespace;
416 for (
i = 0;
i < numTables;
i++)
418 if (!tblinfo[
i].ispartition || tblinfo[
i].numParents == 0)
421 Assert(tblinfo[
i].numParents == 1);
429 if (
index->parentidx == 0)
433 if (parentidx == NULL)
443 attachinfo->
dobj.namespace =
index->indextable->dobj.namespace;
465 index->indextable->dobj.dumpId);
515 for (
i = 0;
i < numTables;
i++)
522 if (tbinfo->
relkind == RELKIND_SEQUENCE ||
523 tbinfo->
relkind == RELKIND_VIEW ||
524 tbinfo->
relkind == RELKIND_MATVIEW)
542 bool foundSameGenerated;
543 bool foundDiffGenerated;
549 foundNotNull =
false;
550 foundDefault =
false;
551 foundSameGenerated =
false;
552 foundDiffGenerated =
false;
553 for (k = 0; k < numParents; k++)
567 foundDefault |= (parentDef != NULL &&
568 strcmp(parentDef->
adef_expr,
"NULL") != 0 &&
573 if (parentDef != NULL &&
577 foundSameGenerated =
true;
579 foundDiffGenerated =
true;
596 if (foundDefault && tbinfo->
attrdefs[
j] == NULL)
606 attrDef->
dobj.namespace = tbinfo->
dobj.namespace;
632 if (foundSameGenerated && !foundDiffGenerated &&
652 dobj->namespace = NULL;
859 catId.
tableoid = RelationRelationId;
877 catId.
tableoid = RelationRelationId;
914 catId.
tableoid = ProcedureRelationId;
932 catId.
tableoid = OperatorRelationId;
950 catId.
tableoid = CollationRelationId;
968 catId.
tableoid = NamespaceRelationId;
986 catId.
tableoid = ExtensionRelationId;
1004 catId.
tableoid = PublicationRelationId;
1022 catId.
tableoid = SubscriptionRelationId;
1096 if (s ==
' ' || s ==
'\0')
1100 if (argNum >= arraysize)
1101 pg_fatal(
"could not parse numeric array \"%s\": too many numbers",
str);
1103 array[argNum++] =
atooid(temp);
1111 if (!(isdigit((
unsigned char) s) || s ==
'-') ||
1112 j >=
sizeof(temp) - 1)
1113 pg_fatal(
"could not parse numeric array \"%s\": invalid character in number",
str);
1118 while (argNum < arraysize)
1135 for (
i = 0;
i < arr_size;
i++)
1137 if (strcmp(pattern, arr[
i]) == 0)
void recordAdditionalCatalogID(CatalogId catId, DumpableObject *dobj)
void recordExtensionMembership(CatalogId catId, ExtensionInfo *ext)
FuncInfo * findFuncByOid(Oid oid)
static void flagInhAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables)
static void flagInhTables(Archive *fout, TableInfo *tblinfo, int numTables, InhInfo *inhinfo, int numInherits)
static void flagInhIndexes(Archive *fout, TableInfo *tblinfo, int numTables)
NamespaceInfo * findNamespaceByOid(Oid oid)
SubscriptionInfo * findSubscriptionByOid(Oid oid)
ExtensionInfo * findOwningExtension(CatalogId catalogId)
TableInfo * getSchemaData(Archive *fout, int *numTablesPtr)
DumpableObject * findObjectByCatalogId(CatalogId catalogId)
void addObjectDependency(DumpableObject *dobj, DumpId refId)
static int allocedDumpIds
DumpableObject * findObjectByDumpId(DumpId dumpId)
void parseOidArray(const char *str, Oid *array, int arraysize)
TableInfo * findTableByOid(Oid oid)
static IndxInfo * findIndexByOid(Oid oid)
DumpId createDumpId(void)
ExtensionInfo * findExtensionByOid(Oid oid)
void AssignDumpId(DumpableObject *dobj)
DumpId getMaxDumpId(void)
static DumpableObject ** dumpIdMap
#define CATALOGIDHASH_INITIAL_SIZE
static int strInArray(const char *pattern, char **arr, int arr_size)
void getDumpableObjects(DumpableObject ***objs, int *numObjs)
CollInfo * findCollationByOid(Oid oid)
static catalogid_hash * catalogIdHash
TypeInfo * findTypeByOid(Oid oid)
OprInfo * findOprByOid(Oid oid)
struct _catalogIdMapEntry CatalogIdMapEntry
void removeObjectDependency(DumpableObject *dobj, DumpId refId)
PublicationInfo * findPublicationByOid(Oid oid)
#define Assert(condition)
#define OidIsValid(objectId)
char * pg_strdup(const char *in)
#define pg_realloc_array(pointer, type, count)
#define pg_malloc_array(type, count)
#define pg_malloc_object(type)
NamespaceInfo * getNamespaces(Archive *fout, int *numNamespaces)
void getConstraints(Archive *fout, TableInfo tblinfo[], int numTables)
void getPublicationNamespaces(Archive *fout)
void getPartitioningInfo(Archive *fout)
DefaultACLInfo * getDefaultACLs(Archive *fout, int *numDefaultACLs)
void getPolicies(Archive *fout, TableInfo tblinfo[], int numTables)
void getExtensionMembership(Archive *fout, ExtensionInfo extinfo[], int numExtensions)
ForeignServerInfo * getForeignServers(Archive *fout, int *numForeignServers)
AccessMethodInfo * getAccessMethods(Archive *fout, int *numAccessMethods)
FdwInfo * getForeignDataWrappers(Archive *fout, int *numForeignDataWrappers)
FuncInfo * getFuncs(Archive *fout, int *numFuncs)
TSConfigInfo * getTSConfigurations(Archive *fout, int *numTSConfigs)
ConvInfo * getConversions(Archive *fout, int *numConversions)
void getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables)
void getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables)
AggInfo * getAggregates(Archive *fout, int *numAggs)
void getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
TSDictInfo * getTSDictionaries(Archive *fout, int *numTSDicts)
InhInfo * getInherits(Archive *fout, int *numInherits)
OpfamilyInfo * getOpfamilies(Archive *fout, int *numOpfamilies)
void getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
void getSubscriptionTables(Archive *fout)
PublicationInfo * getPublications(Archive *fout, int *numPublications)
TSTemplateInfo * getTSTemplates(Archive *fout, int *numTSTemplates)
ProcLangInfo * getProcLangs(Archive *fout, int *numProcLangs)
TypeInfo * getTypes(Archive *fout, int *numTypes)
void getExtendedStatistics(Archive *fout)
void processExtensionTables(Archive *fout, ExtensionInfo extinfo[], int numExtensions)
OpclassInfo * getOpclasses(Archive *fout, int *numOpclasses)
CollInfo * getCollations(Archive *fout, int *numCollations)
void getSubscriptions(Archive *fout)
ExtensionInfo * getExtensions(Archive *fout, int *numExtensions)
TSParserInfo * getTSParsers(Archive *fout, int *numTSParsers)
TransformInfo * getTransforms(Archive *fout, int *numTransforms)
void getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
OprInfo * getOperators(Archive *fout, int *numOprs)
RuleInfo * getRules(Archive *fout, int *numRules)
EventTriggerInfo * getEventTriggers(Archive *fout, int *numEventTriggers)
TableInfo * getTables(Archive *fout, int *numTables)
bool shouldPrintColumn(const DumpOptions *dopt, const TableInfo *tbinfo, int colno)
CastInfo * getCasts(Archive *fout, int *numCasts)
#define DUMP_COMPONENT_ALL
#define DUMP_COMPONENT_NONE
#define DUMP_COMPONENT_DEFINITION
void simple_ptr_list_append(SimplePtrList *list, void *ptr)
DumpComponents components
DumpableObjectType objType
DumpComponents dump_contains
SimplePtrList partattaches
struct _indxInfo * indexes
struct _tableInfo ** parents
struct _attrDefInfo ** attrdefs