📄 pg_dump.h
字号:
/*------------------------------------------------------------------------- * * pg_dump.h * Common header file for the pg_dump utility * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.h,v 1.122 2005/10/15 02:49:39 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef PG_DUMP_H#define PG_DUMP_H#include "postgres_fe.h"/* * pg_dump uses two different mechanisms for identifying database objects: * * CatalogId represents an object by the tableoid and oid of its defining * entry in the system catalogs. We need this to interpret pg_depend entries, * for instance. * * DumpId is a simple sequential integer counter assigned as dumpable objects * are identified during a pg_dump run. We use DumpId internally in preference * to CatalogId for two reasons: it's more compact, and we can assign DumpIds * to "objects" that don't have a separate CatalogId. For example, it is * convenient to consider a table, its data, and its ACL as three separate * dumpable "objects" with distinct DumpIds --- this lets us reason about the * order in which to dump these things. */typedef struct{ Oid tableoid; Oid oid;} CatalogId;typedef int DumpId;/* * The data structures used to store system catalog information. Every * dumpable object is a subclass of DumpableObject. * * NOTE: the structures described here live for the entire pg_dump run; * and in most cases we make a struct for every object we can find in the * catalogs, not only those we are actually going to dump. Hence, it's * best to store a minimal amount of per-object info in these structs, * and retrieve additional per-object info when and if we dump a specific * object. In particular, try to avoid retrieving expensive-to-compute * information until it's known to be needed. We do, however, have to * store enough info to determine whether an object should be dumped and * what order to dump in. */typedef enum{ /* When modifying this enum, update priority tables in pg_dump_sort.c! */ DO_NAMESPACE, DO_TYPE, DO_FUNC, DO_AGG, DO_OPERATOR, DO_OPCLASS, DO_CONVERSION, DO_TABLE, DO_ATTRDEF, DO_INDEX, DO_RULE, DO_TRIGGER, DO_CONSTRAINT, DO_FK_CONSTRAINT, /* see note for ConstraintInfo */ DO_PROCLANG, DO_CAST, DO_TABLE_DATA, DO_TABLE_TYPE, DO_BLOBS, DO_BLOB_COMMENTS} DumpableObjectType;typedef struct _dumpableObject{ DumpableObjectType objType; CatalogId catId; /* zero if not a cataloged object */ DumpId dumpId; /* assigned by AssignDumpId() */ char *name; /* object name (should never be NULL) */ struct _namespaceInfo *namespace; /* containing namespace, or NULL */ DumpId *dependencies; /* dumpIds of objects this one depends on */ int nDeps; /* number of valid dependencies */ int allocDeps; /* allocated size of dependencies[] */} DumpableObject;typedef struct _namespaceInfo{ DumpableObject dobj; char *rolname; /* name of owner, or empty string */ char *nspacl; bool dump; /* true if need to dump definition */} NamespaceInfo;typedef struct _typeInfo{ DumpableObject dobj; /* * Note: dobj.name is the pg_type.typname entry. format_type() might * produce something different than typname */ char *rolname; /* name of owner, or empty string */ Oid typinput; Oid typelem; Oid typrelid; char typrelkind; /* 'r', 'v', 'c', etc */ char typtype; /* 'b', 'c', etc */ bool isArray; /* true if user-defined array type */ bool isDefined; /* true if typisdefined */ /* If it's a domain, we store links to its constraints here: */ int nDomChecks; struct _constraintInfo *domChecks;} TypeInfo;typedef struct _funcInfo{ DumpableObject dobj; char *rolname; /* name of owner, or empty string */ Oid lang; int nargs; Oid *argtypes; Oid prorettype; char *proacl;} FuncInfo;/* AggInfo is a superset of FuncInfo */typedef struct _aggInfo{ FuncInfo aggfn; bool anybasetype; /* is the basetype "any"? */ char *fmtbasetype; /* formatted type name */} AggInfo;typedef struct _oprInfo{ DumpableObject dobj; char *rolname; Oid oprcode;} OprInfo;typedef struct _opclassInfo{ DumpableObject dobj; char *rolname;} OpclassInfo;typedef struct _convInfo{ DumpableObject dobj; char *rolname;} ConvInfo;typedef struct _tableInfo{ /* * These fields are collected for every table in the database. */ DumpableObject dobj; char *rolname; /* name of owner, or empty string */ char *relacl; char relkind; char *reltablespace; /* relation tablespace */ bool hasindex; /* does it have any indexes? */ bool hasrules; /* does it have any rules? */ bool hasoids; /* does it have OIDs? */ int ncheck; /* # of CHECK expressions */ int ntrig; /* # of triggers */ /* these two are set only if table is a SERIAL column's sequence: */ Oid owning_tab; /* OID of table owning sequence */ int owning_col; /* attr # of column owning sequence */ bool interesting; /* true if need to collect more data */ bool dump; /* true if we want to dump it */ /* * These fields are computed only if we decide the table is interesting * (it's either a table to dump, or a direct parent of a dumpable table). */ int numatts; /* number of attributes */ char **attnames; /* the attribute names */ char **atttypnames; /* attribute type names */ int *atttypmod; /* type-specific type modifiers */ int *attstattarget; /* attribute statistics targets */ char *attstorage; /* attribute storage scheme */ char *typstorage; /* type storage scheme */ bool *attisdropped; /* true if attr is dropped; don't dump it */ bool *attislocal; /* true if attr has local definition */ bool *attisserial; /* true if attr is serial or bigserial */ /* * Note: we need to store per-attribute notnull, default, and constraint * stuff for all interesting tables so that we can tell which constraints * were inherited. */ bool *notnull; /* Not null constraints on attributes */ struct _attrDefInfo **attrdefs; /* DEFAULT expressions */ bool *inhAttrs; /* true if each attribute is inherited */ bool *inhAttrDef; /* true if attr's default is inherited */ bool *inhNotNull; /* true if NOT NULL is inherited */ struct _constraintInfo *checkexprs; /* CHECK constraints */ /* * Stuff computed only for dumpable tables. */ int numParents; /* number of (immediate) parent tables */ struct _tableInfo **parents; /* TableInfos of immediate parents */} TableInfo;typedef struct _attrDefInfo{ DumpableObject dobj; TableInfo *adtable; /* link to table of attribute */ int adnum; char *adef_expr; /* decompiled DEFAULT expression */ bool separate; /* TRUE if must dump as separate item */} AttrDefInfo;typedef struct _tableDataInfo{ DumpableObject dobj; TableInfo *tdtable; /* link to table to dump */ bool oids; /* include OIDs in data? */} TableDataInfo;typedef struct _indxInfo{ DumpableObject dobj; TableInfo *indextable; /* link to table the index is for */ char *indexdef; char *tablespace; /* tablespace in which index is stored */ int indnkeys; Oid *indkeys; bool indisclustered; /* if there is an associated constraint object, its dumpId: */ DumpId indexconstraint;} IndxInfo;typedef struct _ruleInfo{ DumpableObject dobj; TableInfo *ruletable; /* link to table the rule is for */ char ev_type; bool is_instead; bool separate; /* TRUE if must dump as separate item */ /* separate is always true for non-ON SELECT rules */} RuleInfo;typedef struct _triggerInfo{ DumpableObject dobj; TableInfo *tgtable; /* link to table the trigger is for */ char *tgfname; int tgtype; int tgnargs; char *tgargs; bool tgisconstraint; char *tgconstrname; Oid tgconstrrelid; char *tgconstrrelname; bool tgenabled; bool tgdeferrable; bool tginitdeferred;} TriggerInfo;/* * struct ConstraintInfo is used for all constraint types. However we * use a different objType for foreign key constraints, to make it easier * to sort them the way we want. */typedef struct _constraintInfo{ DumpableObject dobj; TableInfo *contable; /* NULL if domain constraint */ TypeInfo *condomain; /* NULL if table constraint */ char contype; char *condef; /* definition, if CHECK or FOREIGN KEY */ DumpId conindex; /* identifies associated index if any */ bool coninherited; /* TRUE if appears to be inherited */ bool separate; /* TRUE if must dump as separate item */} ConstraintInfo;typedef struct _procLangInfo{ DumpableObject dobj; bool lanpltrusted; Oid lanplcallfoid; Oid lanvalidator; char *lanacl;} ProcLangInfo;typedef struct _castInfo{ DumpableObject dobj; Oid castsource; Oid casttarget; Oid castfunc; char castcontext;} CastInfo;/* InhInfo isn't a DumpableObject, just temporary state */typedef struct _inhInfo{ Oid inhrelid; /* OID of a child table */ Oid inhparent; /* OID of its parent */} InhInfo;/* global decls */extern bool force_quotes; /* double-quotes for identifiers flag */extern bool g_verbose; /* verbose flag *//* placeholders for comment starting and ending delimiters */extern char g_comment_start[10];extern char g_comment_end[10];extern char g_opaque_type[10]; /* name for the opaque type *//* * common utility functions */extern TableInfo *getSchemaData(int *numTablesPtr, const bool schemaOnly, const bool dataOnly);typedef enum _OidOptions{ zeroAsOpaque = 1, zeroAsAny = 2, zeroAsStar = 4, zeroAsNone = 8} OidOptions;extern void AssignDumpId(DumpableObject *dobj);extern DumpId createDumpId(void);extern DumpId getMaxDumpId(void);extern DumpableObject *findObjectByDumpId(DumpId dumpId);extern DumpableObject *findObjectByCatalogId(CatalogId catalogId);extern void getDumpableObjects(DumpableObject ***objs, int *numObjs);extern void addObjectDependency(DumpableObject *dobj, DumpId refId);extern void removeObjectDependency(DumpableObject *dobj, DumpId refId);extern TableInfo *findTableByOid(Oid oid);extern TypeInfo *findTypeByOid(Oid oid);extern FuncInfo *findFuncByOid(Oid oid);extern OprInfo *findOprByOid(Oid oid);extern void check_conn_and_db(void);extern void exit_nicely(void);extern void parseOidArray(const char *str, Oid *array, int arraysize);extern void sortDumpableObjects(DumpableObject **objs, int numObjs);extern void sortDumpableObjectsByTypeName(DumpableObject **objs, int numObjs);extern void sortDumpableObjectsByTypeOid(DumpableObject **objs, int numObjs);/* * version specific routines */extern NamespaceInfo *getNamespaces(int *numNamespaces);extern TypeInfo *getTypes(int *numTypes);extern FuncInfo *getFuncs(int *numFuncs);extern AggInfo *getAggregates(int *numAggregates);extern OprInfo *getOperators(int *numOperators);extern OpclassInfo *getOpclasses(int *numOpclasses);extern ConvInfo *getConversions(int *numConversions);extern TableInfo *getTables(int *numTables);extern InhInfo *getInherits(int *numInherits);extern void getIndexes(TableInfo tblinfo[], int numTables);extern void getConstraints(TableInfo tblinfo[], int numTables);extern RuleInfo *getRules(int *numRules);extern void getTriggers(TableInfo tblinfo[], int numTables);extern ProcLangInfo *getProcLangs(int *numProcLangs);extern CastInfo *getCasts(int *numCasts);extern void getTableAttrs(TableInfo *tbinfo, int numTables);#endif /* PG_DUMP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -