*
*-------------------------------------------------------------------------
*/
-
#include "postgres_fe.h"
#include <unistd.h>
#include "catalog/pg_cast.h"
#include "catalog/pg_class.h"
#include "catalog/pg_default_acl.h"
-#include "catalog/pg_event_trigger.h"
#include "catalog/pg_largeobject.h"
#include "catalog/pg_largeobject_metadata.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
#include "libpq/libpq-fs.h"
-#include "pg_backup_archiver.h"
-#include "pg_backup_db.h"
-#include "pg_backup_utils.h"
#include "dumputils.h"
#include "parallel.h"
+#include "pg_backup_db.h"
+#include "pg_backup_utils.h"
+#include "pg_dump.h"
typedef struct
int objsubid; /* subobject (table column #) */
} SecLabelItem;
+typedef enum OidOptions
+{
+ zeroAsOpaque = 1,
+ zeroAsAny = 2,
+ zeroAsStar = 4,
+ zeroAsNone = 8
+} OidOptions;
+
/* global decls */
bool g_verbose; /* User wants verbose narration of our
* activities. */
-/* various user-settable parameters */
-static bool schemaOnly;
-static bool dataOnly;
-static int dumpSections; /* bitmask of chosen sections */
-static bool aclsSkip;
-static const char *lockWaitTimeout;
-
/* subquery used to convert user ID (eg, datdba) to user name */
static const char *username_subquery;
static SimpleStringList tabledata_exclude_patterns = {NULL, NULL};
static SimpleOidList tabledata_exclude_oids = {NULL, NULL};
-/* default, if no "inclusion" switches appear, is to dump everything */
-static bool include_everything = true;
char g_opaque_type[10]; /* name for the opaque type */
static const CatalogId nilCatalogId = {0, 0};
-/* flags for various command-line long options */
-static int binary_upgrade = 0;
-static int disable_dollar_quoting = 0;
-static int dump_inserts = 0;
-static int column_inserts = 0;
-static int if_exists = 0;
-static int no_security_labels = 0;
-static int no_synchronized_snapshots = 0;
-static int no_unlogged_table_data = 0;
-static int serializable_deferrable = 0;
-static int enable_row_security = 0;
-
-
static void help(const char *progname);
-static void setup_connection(Archive *AH, const char *dumpencoding,
- char *use_role);
+static void setup_connection(Archive *AH, DumpOptions *dopt,
+ const char *dumpencoding, char *use_role);
static ArchiveFormat parseArchiveFormat(const char *format, ArchiveMode *mode);
static void expand_schema_name_patterns(Archive *fout,
SimpleStringList *patterns,
SimpleStringList *patterns,
SimpleOidList *oids);
static NamespaceInfo *findNamespace(Archive *fout, Oid nsoid, Oid objoid);
-static void dumpTableData(Archive *fout, TableDataInfo *tdinfo);
+static void dumpTableData(Archive *fout, DumpOptions *dopt, TableDataInfo *tdinfo);
static void refreshMatViewData(Archive *fout, TableDataInfo *tdinfo);
static void guessConstraintInheritance(TableInfo *tblinfo, int numTables);
-static void dumpComment(Archive *fout, const char *target,
+static void dumpComment(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId);
static int findComments(Archive *fout, Oid classoid, Oid objoid,
CommentItem **items);
static int collectComments(Archive *fout, CommentItem **items);
-static void dumpSecLabel(Archive *fout, const char *target,
+static void dumpSecLabel(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId);
static int findSecLabels(Archive *fout, Oid classoid, Oid objoid,
SecLabelItem **items);
static int collectSecLabels(Archive *fout, SecLabelItem **items);
-static void dumpDumpableObject(Archive *fout, DumpableObject *dobj);
-static void dumpNamespace(Archive *fout, NamespaceInfo *nspinfo);
-static void dumpExtension(Archive *fout, ExtensionInfo *extinfo);
-static void dumpType(Archive *fout, TypeInfo *tyinfo);
-static void dumpBaseType(Archive *fout, TypeInfo *tyinfo);
-static void dumpEnumType(Archive *fout, TypeInfo *tyinfo);
-static void dumpRangeType(Archive *fout, TypeInfo *tyinfo);
-static void dumpDomain(Archive *fout, TypeInfo *tyinfo);
-static void dumpCompositeType(Archive *fout, TypeInfo *tyinfo);
+static void dumpDumpableObject(Archive *fout, DumpOptions *dopt, DumpableObject *dobj);
+static void dumpNamespace(Archive *fout, DumpOptions *dopt, NamespaceInfo *nspinfo);
+static void dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo);
+static void dumpType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
+static void dumpBaseType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
+static void dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
+static void dumpRangeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
+static void dumpDomain(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
+static void dumpCompositeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo);
static void dumpCompositeTypeColComments(Archive *fout, TypeInfo *tyinfo);
-static void dumpShellType(Archive *fout, ShellTypeInfo *stinfo);
-static void dumpProcLang(Archive *fout, ProcLangInfo *plang);
-static void dumpFunc(Archive *fout, FuncInfo *finfo);
-static void dumpCast(Archive *fout, CastInfo *cast);
-static void dumpOpr(Archive *fout, OprInfo *oprinfo);
-static void dumpOpclass(Archive *fout, OpclassInfo *opcinfo);
-static void dumpOpfamily(Archive *fout, OpfamilyInfo *opfinfo);
-static void dumpCollation(Archive *fout, CollInfo *convinfo);
-static void dumpConversion(Archive *fout, ConvInfo *convinfo);
-static void dumpRule(Archive *fout, RuleInfo *rinfo);
-static void dumpAgg(Archive *fout, AggInfo *agginfo);
-static void dumpTrigger(Archive *fout, TriggerInfo *tginfo);
-static void dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo);
-static void dumpTable(Archive *fout, TableInfo *tbinfo);
-static void dumpTableSchema(Archive *fout, TableInfo *tbinfo);
-static void dumpAttrDef(Archive *fout, AttrDefInfo *adinfo);
-static void dumpSequence(Archive *fout, TableInfo *tbinfo);
+static void dumpShellType(Archive *fout, DumpOptions *dopt, ShellTypeInfo *stinfo);
+static void dumpProcLang(Archive *fout, DumpOptions *dopt, ProcLangInfo *plang);
+static void dumpFunc(Archive *fout, DumpOptions *dopt, FuncInfo *finfo);
+static void dumpCast(Archive *fout, DumpOptions *dopt, CastInfo *cast);
+static void dumpOpr(Archive *fout, DumpOptions *dopt, OprInfo *oprinfo);
+static void dumpOpclass(Archive *fout, DumpOptions *dopt, OpclassInfo *opcinfo);
+static void dumpOpfamily(Archive *fout, DumpOptions *dopt, OpfamilyInfo *opfinfo);
+static void dumpCollation(Archive *fout, DumpOptions *dopt, CollInfo *convinfo);
+static void dumpConversion(Archive *fout, DumpOptions *dopt, ConvInfo *convinfo);
+static void dumpRule(Archive *fout, DumpOptions *dopt, RuleInfo *rinfo);
+static void dumpAgg(Archive *fout, DumpOptions *dopt, AggInfo *agginfo);
+static void dumpTrigger(Archive *fout, DumpOptions *dopt, TriggerInfo *tginfo);
+static void dumpEventTrigger(Archive *fout, DumpOptions *dopt, EventTriggerInfo *evtinfo);
+static void dumpTable(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo);
+static void dumpTableSchema(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo);
+static void dumpAttrDef(Archive *fout, DumpOptions *dopt, AttrDefInfo *adinfo);
+static void dumpSequence(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo);
static void dumpSequenceData(Archive *fout, TableDataInfo *tdinfo);
-static void dumpIndex(Archive *fout, IndxInfo *indxinfo);
-static void dumpConstraint(Archive *fout, ConstraintInfo *coninfo);
-static void dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo);
-static void dumpTSParser(Archive *fout, TSParserInfo *prsinfo);
-static void dumpTSDictionary(Archive *fout, TSDictInfo *dictinfo);
-static void dumpTSTemplate(Archive *fout, TSTemplateInfo *tmplinfo);
-static void dumpTSConfig(Archive *fout, TSConfigInfo *cfginfo);
-static void dumpForeignDataWrapper(Archive *fout, FdwInfo *fdwinfo);
-static void dumpForeignServer(Archive *fout, ForeignServerInfo *srvinfo);
+static void dumpIndex(Archive *fout, DumpOptions *dopt, IndxInfo *indxinfo);
+static void dumpConstraint(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo);
+static void dumpTableConstraintComment(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo);
+static void dumpTSParser(Archive *fout, DumpOptions *dopt, TSParserInfo *prsinfo);
+static void dumpTSDictionary(Archive *fout, DumpOptions *dopt, TSDictInfo *dictinfo);
+static void dumpTSTemplate(Archive *fout, DumpOptions *dopt, TSTemplateInfo *tmplinfo);
+static void dumpTSConfig(Archive *fout, DumpOptions *dopt, TSConfigInfo *cfginfo);
+static void dumpForeignDataWrapper(Archive *fout, DumpOptions *dopt, FdwInfo *fdwinfo);
+static void dumpForeignServer(Archive *fout, DumpOptions *dopt, ForeignServerInfo *srvinfo);
static void dumpUserMappings(Archive *fout,
const char *servername, const char *namespace,
const char *owner, CatalogId catalogId, DumpId dumpId);
-static void dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo);
+static void dumpDefaultACL(Archive *fout, DumpOptions *dopt, DefaultACLInfo *daclinfo);
-static void dumpACL(Archive *fout, CatalogId objCatId, DumpId objDumpId,
+static void dumpACL(Archive *fout, DumpOptions *dopt, CatalogId objCatId, DumpId objDumpId,
const char *type, const char *name, const char *subname,
const char *tag, const char *nspname, const char *owner,
const char *acls);
DumpableObject *boundaryObjs);
static void getDomainConstraints(Archive *fout, TypeInfo *tyinfo);
-static void getTableData(TableInfo *tblinfo, int numTables, bool oids);
-static void makeTableDataInfo(TableInfo *tbinfo, bool oids);
+static void getTableData(DumpOptions *dopt, TableInfo *tblinfo, int numTables, bool oids);
+static void makeTableDataInfo(DumpOptions *dopt, TableInfo *tbinfo, bool oids);
static void buildMatViewRefreshDependencies(Archive *fout);
static void getTableDataFKConstraints(void);
static char *format_function_arguments(FuncInfo *finfo, char *funcargs,
static char *getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts);
static char *myFormatType(const char *typname, int32 typmod);
static void getBlobs(Archive *fout);
-static void dumpBlob(Archive *fout, BlobInfo *binfo);
-static int dumpBlobs(Archive *fout, void *arg);
-static void dumpRowSecurity(Archive *fout, RowSecurityInfo *rsinfo);
-static void dumpDatabase(Archive *AH);
+static void dumpBlob(Archive *fout, DumpOptions *dopt, BlobInfo *binfo);
+static int dumpBlobs(Archive *fout, DumpOptions *dopt, void *arg);
+static void dumpRowSecurity(Archive *fout, DumpOptions *dopt, RowSecurityInfo *rsinfo);
+static void dumpDatabase(Archive *AH, DumpOptions *dopt);
static void dumpEncoding(Archive *AH);
static void dumpStdStrings(Archive *AH);
static void binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
static const char *fmtCopyColumnList(const TableInfo *ti, PQExpBuffer buffer);
static char *get_synchronized_snapshot(Archive *fout);
static PGresult *ExecuteSqlQueryForSingleRow(Archive *fout, char *query);
-static void setupDumpWorker(Archive *AHX, RestoreOptions *ropt);
+static void setupDumpWorker(Archive *AHX, DumpOptions *dopt, RestoreOptions *ropt);
int
int c;
const char *filename = NULL;
const char *format = "p";
- const char *dbname = NULL;
- const char *pghost = NULL;
- const char *pgport = NULL;
- const char *username = NULL;
- const char *dumpencoding = NULL;
- bool oids = false;
TableInfo *tblinfo;
int numTables;
DumpableObject **dobjs;
int numObjs;
DumpableObject *boundaryObjs;
int i;
+ int optindex;
+ RestoreOptions *ropt;
+ Archive *fout; /* the script file */
+ const char *dumpencoding = NULL;
+ char *use_role = NULL;
int numWorkers = 1;
- enum trivalue prompt_password = TRI_DEFAULT;
+ trivalue prompt_password = TRI_DEFAULT;
int compressLevel = -1;
int plainText = 0;
- int outputClean = 0;
- int outputCreateDB = 0;
- bool outputBlobs = false;
- int outputNoOwner = 0;
- char *outputSuperuser = NULL;
- char *use_role = NULL;
- int optindex;
- RestoreOptions *ropt;
ArchiveFormat archiveFormat = archUnknown;
- ArchiveMode archiveMode;
- Archive *fout; /* the script file */
+ ArchiveMode archiveMode;
- static int disable_triggers = 0;
- static int outputNoTablespaces = 0;
- static int use_setsessauth = 0;
+ DumpOptions *dopt = NewDumpOptions();
- static struct option long_options[] = {
+ struct option long_options[] = {
{"data-only", no_argument, NULL, 'a'},
{"blobs", no_argument, NULL, 'b'},
{"clean", no_argument, NULL, 'c'},
/*
* the following options don't have an equivalent short option letter
*/
- {"attribute-inserts", no_argument, &column_inserts, 1},
- {"binary-upgrade", no_argument, &binary_upgrade, 1},
- {"column-inserts", no_argument, &column_inserts, 1},
- {"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
- {"disable-triggers", no_argument, &disable_triggers, 1},
- {"enable-row-security", no_argument, &enable_row_security, 1},
+ {"attribute-inserts", no_argument, &dopt->column_inserts, 1},
+ {"binary-upgrade", no_argument, &dopt->binary_upgrade, 1},
+ {"column-inserts", no_argument, &dopt->column_inserts, 1},
+ {"disable-dollar-quoting", no_argument, &dopt->disable_dollar_quoting, 1},
+ {"disable-triggers", no_argument, &dopt->disable_triggers, 1},
+ {"enable-row-security", no_argument, &dopt->enable_row_security, 1},
{"exclude-table-data", required_argument, NULL, 4},
- {"if-exists", no_argument, &if_exists, 1},
- {"inserts", no_argument, &dump_inserts, 1},
+ {"if-exists", no_argument, &dopt->if_exists, 1},
+ {"inserts", no_argument, &dopt->dump_inserts, 1},
{"lock-wait-timeout", required_argument, NULL, 2},
- {"no-tablespaces", no_argument, &outputNoTablespaces, 1},
+ {"no-tablespaces", no_argument, &dopt->outputNoTablespaces, 1},
{"quote-all-identifiers", no_argument, "e_all_identifiers, 1},
{"role", required_argument, NULL, 3},
{"section", required_argument, NULL, 5},
- {"serializable-deferrable", no_argument, &serializable_deferrable, 1},
- {"use-set-session-authorization", no_argument, &use_setsessauth, 1},
- {"no-security-labels", no_argument, &no_security_labels, 1},
- {"no-synchronized-snapshots", no_argument, &no_synchronized_snapshots, 1},
- {"no-unlogged-table-data", no_argument, &no_unlogged_table_data, 1},
+ {"serializable-deferrable", no_argument, &dopt->serializable_deferrable, 1},
+ {"use-set-session-authorization", no_argument, &dopt->use_setsessauth, 1},
+ {"no-security-labels", no_argument, &dopt->no_security_labels, 1},
+ {"no-synchronized-snapshots", no_argument, &dopt->no_synchronized_snapshots, 1},
+ {"no-unlogged-table-data", no_argument, &dopt->no_unlogged_table_data, 1},
{NULL, 0, NULL, 0}
};
g_comment_end[0] = '\0';
strcpy(g_opaque_type, "opaque");
- dataOnly = schemaOnly = false;
- dumpSections = DUMP_UNSECTIONED;
- lockWaitTimeout = NULL;
-
progname = get_progname(argv[0]);
/* Set default options based on progname */
switch (c)
{
case 'a': /* Dump data only */
- dataOnly = true;
+ dopt->dataOnly = true;
break;
case 'b': /* Dump blobs */
- outputBlobs = true;
+ dopt->outputBlobs = true;
break;
case 'c': /* clean (i.e., drop) schema prior to create */
- outputClean = 1;
+ dopt->outputClean = 1;
break;
case 'C': /* Create DB */
- outputCreateDB = 1;
+ dopt->outputCreateDB = 1;
break;
case 'd': /* database name */
- dbname = pg_strdup(optarg);
+ dopt->dbname = pg_strdup(optarg);
break;
case 'E': /* Dump encoding */
break;
case 'h': /* server host */
- pghost = pg_strdup(optarg);
+ dopt->pghost = pg_strdup(optarg);
break;
case 'i':
case 'n': /* include schema(s) */
simple_string_list_append(&schema_include_patterns, optarg);
- include_everything = false;
+ dopt->include_everything = false;
break;
case 'N': /* exclude schema(s) */
break;
case 'o': /* Dump oids */
- oids = true;
+ dopt->oids = true;
break;
case 'O': /* Don't reconnect to match owner */
- outputNoOwner = 1;
+ dopt->outputNoOwner = 1;
break;
case 'p': /* server port */
- pgport = pg_strdup(optarg);
+ dopt->pgport = pg_strdup(optarg);
break;
case 'R':
break;
case 's': /* dump schema only */
- schemaOnly = true;
+ dopt->schemaOnly = true;
break;
case 'S': /* Username for superuser in plain text output */
- outputSuperuser = pg_strdup(optarg);
+ dopt->outputSuperuser = pg_strdup(optarg);
break;
case 't': /* include table(s) */
simple_string_list_append(&table_include_patterns, optarg);
- include_everything = false;
+ dopt->include_everything = false;
break;
case 'T': /* exclude table(s) */
break;
case 'U':
- username = pg_strdup(optarg);
+ dopt->username = pg_strdup(optarg);
break;
case 'v': /* verbose */
break;
case 'x': /* skip ACL dump */
- aclsSkip = true;
+ dopt->aclsSkip = true;
break;
case 'Z': /* Compression Level */
break;
case 2: /* lock-wait-timeout */
- lockWaitTimeout = pg_strdup(optarg);
+ dopt->lockWaitTimeout = pg_strdup(optarg);
break;
case 3: /* SET ROLE */
break;
case 5: /* section */
- set_dump_section(optarg, &dumpSections);
+ set_dump_section(optarg, &dopt->dumpSections);
break;
default:
* Non-option argument specifies database name as long as it wasn't
* already specified with -d / --dbname
*/
- if (optind < argc && dbname == NULL)
- dbname = argv[optind++];
+ if (optind < argc && dopt->dbname == NULL)
+ dopt->dbname = argv[optind++];
/* Complain if any arguments remain */
if (optind < argc)
}
/* --column-inserts implies --inserts */
- if (column_inserts)
- dump_inserts = 1;
+ if (dopt->column_inserts)
+ dopt->dump_inserts = 1;
- if (dataOnly && schemaOnly)
+ if (dopt->dataOnly && dopt->schemaOnly)
{
write_msg(NULL, "options -s/--schema-only and -a/--data-only cannot be used together\n");
exit_nicely(1);
}
- if (dataOnly && outputClean)
+ if (dopt->dataOnly && dopt->outputClean)
{
write_msg(NULL, "options -c/--clean and -a/--data-only cannot be used together\n");
exit_nicely(1);
}
- if (dump_inserts && oids)
+ if (dopt->dump_inserts && dopt->oids)
{
write_msg(NULL, "options --inserts/--column-inserts and -o/--oids cannot be used together\n");
write_msg(NULL, "(The INSERT command cannot set OIDs.)\n");
exit_nicely(1);
}
- if (if_exists && !outputClean)
+ if (dopt->if_exists && !dopt->outputClean)
exit_horribly(NULL, "option --if-exists requires option -c/--clean\n");
/* Identify archive format to emit */
* Open the database using the Archiver, so it knows about it. Errors mean
* death.
*/
- ConnectDatabase(fout, dbname, pghost, pgport, username, prompt_password);
- setup_connection(fout, dumpencoding, use_role);
+ ConnectDatabase(fout, dopt->dbname, dopt->pghost, dopt->pgport, dopt->username, prompt_password);
+ setup_connection(fout, dopt, dumpencoding, use_role);
/*
* Disable security label support if server version < v9.1.x (prevents
* access to nonexistent pg_seclabel catalog)
*/
if (fout->remoteVersion < 90100)
- no_security_labels = 1;
+ dopt->no_security_labels = 1;
/*
* When running against 9.0 or later, check if we are in recovery mode,
* On hot standby slaves, never try to dump unlogged table data,
* since it will just throw an error.
*/
- no_unlogged_table_data = true;
+ dopt->no_unlogged_table_data = true;
}
PQclear(res);
}
/* check the version for the synchronized snapshots feature */
if (numWorkers > 1 && fout->remoteVersion < 90200
- && !no_synchronized_snapshots)
+ && !dopt->no_synchronized_snapshots)
exit_horribly(NULL,
"Synchronized snapshots are not supported by this server version.\n"
"Run with --no-synchronized-snapshots instead if you do not need\n"
* Dumping blobs is now default unless we saw an inclusion switch or -s
* ... but even if we did see one of these, -b turns it back on.
*/
- if (include_everything && !schemaOnly)
- outputBlobs = true;
+ if (dopt->include_everything && !dopt->schemaOnly)
+ dopt->outputBlobs = true;
/*
* Now scan the database and create DumpableObject structs for all the
* objects we intend to dump.
*/
- tblinfo = getSchemaData(fout, &numTables);
+ tblinfo = getSchemaData(fout, dopt, &numTables);
if (fout->remoteVersion < 80400)
guessConstraintInheritance(tblinfo, numTables);
- if (!schemaOnly)
+ if (!dopt->schemaOnly)
{
- getTableData(tblinfo, numTables, oids);
+ getTableData(dopt, tblinfo, numTables, dopt->oids);
buildMatViewRefreshDependencies(fout);
- if (dataOnly)
+ if (dopt->dataOnly)
getTableDataFKConstraints();
}
- if (outputBlobs)
+ if (dopt->outputBlobs)
getBlobs(fout);
/*
dumpStdStrings(fout);
/* The database item is always next, unless we don't want it at all */
- if (include_everything && !dataOnly)
- dumpDatabase(fout);
+ if (dopt->include_everything && !dopt->dataOnly)
+ dumpDatabase(fout, dopt);
/* Now the rearrangeable objects. */
for (i = 0; i < numObjs; i++)
- dumpDumpableObject(fout, dobjs[i]);
+ dumpDumpableObject(fout, dopt, dobjs[i]);
/*
* Set up options info to ensure we dump what we want.
*/
ropt = NewRestoreOptions();
ropt->filename = filename;
- ropt->dropSchema = outputClean;
- ropt->dataOnly = dataOnly;
- ropt->schemaOnly = schemaOnly;
- ropt->if_exists = if_exists;
- ropt->dumpSections = dumpSections;
- ropt->aclsSkip = aclsSkip;
- ropt->superuser = outputSuperuser;
- ropt->createDB = outputCreateDB;
- ropt->noOwner = outputNoOwner;
- ropt->noTablespace = outputNoTablespaces;
- ropt->disable_triggers = disable_triggers;
- ropt->use_setsessauth = use_setsessauth;
- ropt->enable_row_security = enable_row_security;
+
+ /* if you change this list, see dumpOptionsFromRestoreOptions */
+ ropt->dropSchema = dopt->outputClean;
+ ropt->dataOnly = dopt->dataOnly;
+ ropt->schemaOnly = dopt->schemaOnly;
+ ropt->if_exists = dopt->if_exists;
+ ropt->column_inserts = dopt->column_inserts;
+ ropt->dumpSections = dopt->dumpSections;
+ ropt->aclsSkip = dopt->aclsSkip;
+ ropt->superuser = dopt->outputSuperuser;
+ ropt->createDB = dopt->outputCreateDB;
+ ropt->noOwner = dopt->outputNoOwner;
+ ropt->noTablespace = dopt->outputNoTablespaces;
+ ropt->disable_triggers = dopt->disable_triggers;
+ ropt->use_setsessauth = dopt->use_setsessauth;
+ ropt->disable_dollar_quoting = dopt->disable_dollar_quoting;
+ ropt->dump_inserts = dopt->dump_inserts;
+ ropt->no_security_labels = dopt->no_security_labels;
+ ropt->lockWaitTimeout = dopt->lockWaitTimeout;
+ ropt->include_everything = dopt->include_everything;
+ ropt->enable_row_security = dopt->enable_row_security;
if (compressLevel == -1)
ropt->compression = 0;
if (plainText)
RestoreArchive(fout);
- CloseArchive(fout);
+ CloseArchive(fout, dopt);
exit_nicely(0);
}
}
static void
-setup_connection(Archive *AH, const char *dumpencoding, char *use_role)
+setup_connection(Archive *AH, DumpOptions *dopt, const char *dumpencoding, char *use_role)
{
PGconn *conn = GetConnection(AH);
const char *std_strings;
ExecuteSqlStatement(AH, "BEGIN");
if (AH->remoteVersion >= 90100)
{
- if (serializable_deferrable)
+ if (dopt->serializable_deferrable)
ExecuteSqlStatement(AH,
"SET TRANSACTION ISOLATION LEVEL "
"SERIALIZABLE, READ ONLY, DEFERRABLE");
- if (AH->numWorkers > 1 && AH->remoteVersion >= 90200 && !no_synchronized_snapshots)
+ if (AH->numWorkers > 1 && AH->remoteVersion >= 90200 && !dopt->no_synchronized_snapshots)
{
if (AH->sync_snapshot_id)
{
if (AH->remoteVersion >= 90500)
{
- if (enable_row_security)
+ if (dopt->enable_row_security)
ExecuteSqlStatement(AH, "SET row_security TO ON");
else
ExecuteSqlStatement(AH, "SET row_security TO OFF");
}
static void
-setupDumpWorker(Archive *AHX, RestoreOptions *ropt)
+setupDumpWorker(Archive *AHX, DumpOptions *dopt, RestoreOptions *ropt)
{
- setup_connection(AHX, NULL, NULL);
+ setup_connection(AHX, dopt, NULL, NULL);
}
static char *
* and aclsSkip are checked separately.
*/
static void
-selectDumpableDefaultACL(DefaultACLInfo *dinfo)
+selectDumpableDefaultACL(DumpOptions *dopt, DefaultACLInfo *dinfo)
{
if (dinfo->dobj.namespace)
dinfo->dobj.dump = dinfo->dobj.namespace->dobj.dump;
else
- dinfo->dobj.dump = include_everything;
+ dinfo->dobj.dump = dopt->include_everything;
}
/*
* such extensions by their having OIDs in the range reserved for initdb.
*/
static void
-selectDumpableExtension(ExtensionInfo *extinfo)
+selectDumpableExtension(DumpOptions *dopt, ExtensionInfo *extinfo)
{
- if (binary_upgrade && extinfo->dobj.catId.oid < (Oid) FirstNormalObjectId)
+ if (dopt->binary_upgrade && extinfo->dobj.catId.oid < (Oid) FirstNormalObjectId)
extinfo->dobj.dump = false;
else
- extinfo->dobj.dump = include_everything;
+ extinfo->dobj.dump = dopt->include_everything;
}
/*
*/
static int
-dumpTableData_copy(Archive *fout, void *dcontext)
+dumpTableData_copy(Archive *fout, DumpOptions *dopt, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
* E'' strings, or dollar-quoted strings. So don't emit anything like that.
*/
static int
-dumpTableData_insert(Archive *fout, void *dcontext)
+dumpTableData_insert(Archive *fout, DumpOptions *dopt, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
else
{
/* append the list of column names if required */
- if (column_inserts)
+ if (dopt->column_inserts)
{
appendPQExpBufferStr(insertStmt, "(");
for (field = 0; field < nfields; field++)
* Actually, this just makes an ArchiveEntry for the table contents.
*/
static void
-dumpTableData(Archive *fout, TableDataInfo *tdinfo)
+dumpTableData(Archive *fout, DumpOptions *dopt, TableDataInfo *tdinfo)
{
TableInfo *tbinfo = tdinfo->tdtable;
PQExpBuffer copyBuf = createPQExpBuffer();
DataDumperPtr dumpFn;
char *copyStmt;
- if (!dump_inserts)
+ if (!dopt->dump_inserts)
{
/* Dump/restore using COPY */
dumpFn = dumpTableData_copy;
* set up dumpable objects representing the contents of tables
*/
static void
-getTableData(TableInfo *tblinfo, int numTables, bool oids)
+getTableData(DumpOptions *dopt, TableInfo *tblinfo, int numTables, bool oids)
{
int i;
for (i = 0; i < numTables; i++)
{
if (tblinfo[i].dobj.dump)
- makeTableDataInfo(&(tblinfo[i]), oids);
+ makeTableDataInfo(dopt, &(tblinfo[i]), oids);
}
}
* table data; the "dump" flag in such objects isn't used.
*/
static void
-makeTableDataInfo(TableInfo *tbinfo, bool oids)
+makeTableDataInfo(DumpOptions *dopt, TableInfo *tbinfo, bool oids)
{
TableDataInfo *tdinfo;
/* Don't dump data in unlogged tables, if so requested */
if (tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED &&
- no_unlogged_table_data)
+ dopt->no_unlogged_table_data)
return;
/* Check that the data is not explicitly excluded */
* dump the database definition
*/
static void
-dumpDatabase(Archive *fout)
+dumpDatabase(Archive *fout, DumpOptions *dopt)
{
PQExpBuffer dbQry = createPQExpBuffer();
PQExpBuffer delQry = createPQExpBuffer();
fmtId(tablespace));
appendPQExpBufferStr(creaQry, ";\n");
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
{
appendPQExpBufferStr(creaQry, "\n-- For binary upgrade, set datfrozenxid and datminmxid.\n");
appendPQExpBuffer(creaQry, "UPDATE pg_catalog.pg_database\n"
* pg_largeobject and pg_largeobject_metadata come from the old system
* intact, so set their relfrozenxids and relminmxids.
*/
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
{
PGresult *lo_res;
PQExpBuffer loFrozenQry = createPQExpBuffer();
{
resetPQExpBuffer(dbQry);
appendPQExpBuffer(dbQry, "DATABASE %s", fmtId(datname));
- dumpComment(fout, dbQry->data, NULL, "",
+ dumpComment(fout, dopt, dbQry->data, NULL, "",
dbCatId, 0, dbDumpId);
}
PQclear(res);
/* Dump shared security label. */
- if (!no_security_labels && fout->remoteVersion >= 90200)
+ if (!dopt->no_security_labels && fout->remoteVersion >= 90200)
{
PQExpBuffer seclabelQry = createPQExpBuffer();
destroyPQExpBuffer(creaQry);
}
-
/*
* dumpEncoding: put the correct encoding into the archive
*/
* dump the definition (metadata) of the given large object
*/
static void
-dumpBlob(Archive *fout, BlobInfo *binfo)
+dumpBlob(Archive *fout, DumpOptions *dopt, BlobInfo *binfo)
{
PQExpBuffer cquery = createPQExpBuffer();
PQExpBuffer dquery = createPQExpBuffer();
appendPQExpBuffer(cquery, "LARGE OBJECT %s", binfo->dobj.name);
/* Dump comment if any */
- dumpComment(fout, cquery->data,
+ dumpComment(fout, dopt, cquery->data,
NULL, binfo->rolname,
binfo->dobj.catId, 0, binfo->dobj.dumpId);
/* Dump security label if any */
- dumpSecLabel(fout, cquery->data,
+ dumpSecLabel(fout, dopt, cquery->data,
NULL, binfo->rolname,
binfo->dobj.catId, 0, binfo->dobj.dumpId);
/* Dump ACL if any */
if (binfo->blobacl)
- dumpACL(fout, binfo->dobj.catId, binfo->dobj.dumpId, "LARGE OBJECT",
+ dumpACL(fout, dopt, binfo->dobj.catId, binfo->dobj.dumpId, "LARGE OBJECT",
binfo->dobj.name, NULL, cquery->data,
NULL, binfo->rolname, binfo->blobacl);
* dump the data contents of all large objects
*/
static int
-dumpBlobs(Archive *fout, void *arg)
+dumpBlobs(Archive *fout, DumpOptions *dopt, void *arg)
{
const char *blobQry;
const char *blobFetchQry;
* dump the definition of the given row-security policy
*/
static void
-dumpRowSecurity(Archive *fout, RowSecurityInfo *rsinfo)
+dumpRowSecurity(Archive *fout, DumpOptions *dopt, RowSecurityInfo *rsinfo)
{
TableInfo *tbinfo = rsinfo->rstable;
PQExpBuffer query;
PQExpBuffer delqry;
const char *cmd;
- if (dataOnly)
+ if (dopt->dataOnly)
return;
/*
* numExtensions is set to the number of extensions read in
*/
ExtensionInfo *
-getExtensions(Archive *fout, int *numExtensions)
+getExtensions(Archive *fout, DumpOptions *dopt, int *numExtensions)
{
PGresult *res;
int ntups;
extinfo[i].extcondition = pg_strdup(PQgetvalue(res, i, i_extcondition));
/* Decide whether we want to dump it */
- selectDumpableExtension(&(extinfo[i]));
+ selectDumpableExtension(dopt, &(extinfo[i]));
}
PQclear(res);
* numAggs is set to the number of aggregates read in
*/
AggInfo *
-getAggregates(Archive *fout, int *numAggs)
+getAggregates(Archive *fout, DumpOptions *dopt, int *numAggs)
{
PGresult *res;
int ntups;
"(SELECT oid FROM pg_namespace "
"WHERE nspname = 'pg_catalog')",
username_subquery);
- if (binary_upgrade && fout->remoteVersion >= 90100)
+ if (dopt->binary_upgrade && fout->remoteVersion >= 90100)
appendPQExpBufferStr(query,
" OR EXISTS(SELECT 1 FROM pg_depend WHERE "
"classid = 'pg_proc'::regclass AND "
* numFuncs is set to the number of functions read in
*/
FuncInfo *
-getFuncs(Archive *fout, int *numFuncs)
+getFuncs(Archive *fout, DumpOptions *dopt, int *numFuncs)
{
PGresult *res;
int ntups;
"\n AND NOT EXISTS (SELECT 1 FROM pg_depend "
"WHERE classid = 'pg_proc'::regclass AND "
"objid = p.oid AND deptype = 'i')");
- if (binary_upgrade && fout->remoteVersion >= 90100)
+ if (dopt->binary_upgrade && fout->remoteVersion >= 90100)
appendPQExpBufferStr(query,
"\n OR EXISTS(SELECT 1 FROM pg_depend WHERE "
"classid = 'pg_proc'::regclass AND "
* numTables is set to the number of tables read in
*/
TableInfo *
-getTables(Archive *fout, int *numTables)
+getTables(Archive *fout, DumpOptions *dopt, int *numTables)
{
PGresult *res;
int ntups;
i_toastreloptions = PQfnumber(res, "toast_reloptions");
i_reloftype = PQfnumber(res, "reloftype");
- if (lockWaitTimeout && fout->remoteVersion >= 70300)
+ if (dopt->lockWaitTimeout && fout->remoteVersion >= 70300)
{
/*
* Arrange to fail instead of waiting forever for a table lock.
*/
resetPQExpBuffer(query);
appendPQExpBufferStr(query, "SET statement_timeout = ");
- appendStringLiteralConn(query, lockWaitTimeout, GetConnection(fout));
+ appendStringLiteralConn(query, dopt->lockWaitTimeout, GetConnection(fout));
ExecuteSqlStatement(fout, query->data);
}
tblinfo[i].dobj.name);
}
- if (lockWaitTimeout && fout->remoteVersion >= 70300)
+ if (dopt->lockWaitTimeout && fout->remoteVersion >= 70300)
{
ExecuteSqlStatement(fout, "SET statement_timeout = 0");
}
* modifies tblinfo
*/
void
-getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
+getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables)
{
int i,
j;
addObjectDependency(&attrdefs[j].dobj,
tbinfo->dobj.dumpId);
}
- else if (!shouldPrintColumn(tbinfo, adnum - 1))
+ else if (!shouldPrintColumn(dopt, tbinfo, adnum - 1))
{
/* column will be suppressed, print default separately */
attrdefs[j].separate = true;
* must be kept in sync with this decision.
*/
bool
-shouldPrintColumn(TableInfo *tbinfo, int colno)
+shouldPrintColumn(DumpOptions *dopt, TableInfo *tbinfo, int colno)
{
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
return true;
return (tbinfo->attislocal[colno] && !tbinfo->attisdropped[colno]);
}
* numDefaultACLs is set to the number of ACLs read in
*/
DefaultACLInfo *
-getDefaultACLs(Archive *fout, int *numDefaultACLs)
+getDefaultACLs(Archive *fout, DumpOptions *dopt, int *numDefaultACLs)
{
DefaultACLInfo *daclinfo;
PQExpBuffer query;
daclinfo[i].defaclacl = pg_strdup(PQgetvalue(res, i, i_defaclacl));
/* Decide whether we want to dump it */
- selectDumpableDefaultACL(&(daclinfo[i]));
+ selectDumpableDefaultACL(dopt, &(daclinfo[i]));
}
PQclear(res);
* calling ArchiveEntry() for the specified object.
*/
static void
-dumpComment(Archive *fout, const char *target,
+dumpComment(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
/* Comments are schema not data ... except blob comments are data */
if (strncmp(target, "LARGE OBJECT ", 13) != 0)
{
- if (dataOnly)
+ if (dopt->dataOnly)
return;
}
else
{
- if (schemaOnly)
+ if (dopt->schemaOnly)
return;
}
* and its columns.
*/
static void
-dumpTableComment(Archive *fout, TableInfo *tbinfo,
+dumpTableComment(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo,
const char *reltypename)
{
CommentItem *comments;
PQExpBuffer target;
/* Comments are SCHEMA not data */
- if (dataOnly)
+ if (dopt->dataOnly)
return;
/* Search for comments associated with relation, using table */
* ArchiveEntries (TOC objects) for each object to be dumped.
*/
static void
-dumpDumpableObject(Archive *fout, DumpableObject *dobj)
+dumpDumpableObject(Archive *fout, DumpOptions *dopt, DumpableObject *dobj)
{
switch (dobj->objType)
{
case DO_NAMESPACE:
- dumpNamespace(fout, (NamespaceInfo *) dobj);
+ dumpNamespace(fout, dopt, (NamespaceInfo *) dobj);
break;
case DO_EXTENSION:
- dumpExtension(fout, (ExtensionInfo *) dobj);
+ dumpExtension(fout, dopt, (ExtensionInfo *) dobj);
break;
case DO_TYPE:
- dumpType(fout, (TypeInfo *) dobj);
+ dumpType(fout, dopt, (TypeInfo *) dobj);
break;
case DO_SHELL_TYPE:
- dumpShellType(fout, (ShellTypeInfo *) dobj);
+ dumpShellType(fout, dopt, (ShellTypeInfo *) dobj);
break;
case DO_FUNC:
- dumpFunc(fout, (FuncInfo *) dobj);
+ dumpFunc(fout, dopt, (FuncInfo *) dobj);
break;
case DO_AGG:
- dumpAgg(fout, (AggInfo *) dobj);
+ dumpAgg(fout, dopt, (AggInfo *) dobj);
break;
case DO_OPERATOR:
- dumpOpr(fout, (OprInfo *) dobj);
+ dumpOpr(fout, dopt, (OprInfo *) dobj);
break;
case DO_OPCLASS:
- dumpOpclass(fout, (OpclassInfo *) dobj);
+ dumpOpclass(fout, dopt, (OpclassInfo *) dobj);
break;
case DO_OPFAMILY:
- dumpOpfamily(fout, (OpfamilyInfo *) dobj);
+ dumpOpfamily(fout, dopt, (OpfamilyInfo *) dobj);
break;
case DO_COLLATION:
- dumpCollation(fout, (CollInfo *) dobj);
+ dumpCollation(fout, dopt, (CollInfo *) dobj);
break;
case DO_CONVERSION:
- dumpConversion(fout, (ConvInfo *) dobj);
+ dumpConversion(fout, dopt, (ConvInfo *) dobj);
break;
case DO_TABLE:
- dumpTable(fout, (TableInfo *) dobj);
+ dumpTable(fout, dopt, (TableInfo *) dobj);
break;
case DO_ATTRDEF:
- dumpAttrDef(fout, (AttrDefInfo *) dobj);
+ dumpAttrDef(fout, dopt, (AttrDefInfo *) dobj);
break;
case DO_INDEX:
- dumpIndex(fout, (IndxInfo *) dobj);
+ dumpIndex(fout, dopt, (IndxInfo *) dobj);
break;
case DO_REFRESH_MATVIEW:
refreshMatViewData(fout, (TableDataInfo *) dobj);
break;
case DO_RULE:
- dumpRule(fout, (RuleInfo *) dobj);
+ dumpRule(fout, dopt, (RuleInfo *) dobj);
break;
case DO_TRIGGER:
- dumpTrigger(fout, (TriggerInfo *) dobj);
+ dumpTrigger(fout, dopt, (TriggerInfo *) dobj);
break;
case DO_EVENT_TRIGGER:
- dumpEventTrigger(fout, (EventTriggerInfo *) dobj);
+ dumpEventTrigger(fout, dopt, (EventTriggerInfo *) dobj);
break;
case DO_CONSTRAINT:
- dumpConstraint(fout, (ConstraintInfo *) dobj);
+ dumpConstraint(fout, dopt, (ConstraintInfo *) dobj);
break;
case DO_FK_CONSTRAINT:
- dumpConstraint(fout, (ConstraintInfo *) dobj);
+ dumpConstraint(fout, dopt, (ConstraintInfo *) dobj);
break;
case DO_PROCLANG:
- dumpProcLang(fout, (ProcLangInfo *) dobj);
+ dumpProcLang(fout, dopt, (ProcLangInfo *) dobj);
break;
case DO_CAST:
- dumpCast(fout, (CastInfo *) dobj);
+ dumpCast(fout, dopt, (CastInfo *) dobj);
break;
case DO_TABLE_DATA:
if (((TableDataInfo *) dobj)->tdtable->relkind == RELKIND_SEQUENCE)
dumpSequenceData(fout, (TableDataInfo *) dobj);
else
- dumpTableData(fout, (TableDataInfo *) dobj);
+ dumpTableData(fout, dopt, (TableDataInfo *) dobj);
break;
case DO_DUMMY_TYPE:
/* table rowtypes and array types are never dumped separately */
break;
case DO_TSPARSER:
- dumpTSParser(fout, (TSParserInfo *) dobj);
+ dumpTSParser(fout, dopt, (TSParserInfo *) dobj);
break;
case DO_TSDICT:
- dumpTSDictionary(fout, (TSDictInfo *) dobj);
+ dumpTSDictionary(fout, dopt, (TSDictInfo *) dobj);
break;
case DO_TSTEMPLATE:
- dumpTSTemplate(fout, (TSTemplateInfo *) dobj);
+ dumpTSTemplate(fout, dopt, (TSTemplateInfo *) dobj);
break;
case DO_TSCONFIG:
- dumpTSConfig(fout, (TSConfigInfo *) dobj);
+ dumpTSConfig(fout, dopt, (TSConfigInfo *) dobj);
break;
case DO_FDW:
- dumpForeignDataWrapper(fout, (FdwInfo *) dobj);
+ dumpForeignDataWrapper(fout, dopt, (FdwInfo *) dobj);
break;
case DO_FOREIGN_SERVER:
- dumpForeignServer(fout, (ForeignServerInfo *) dobj);
+ dumpForeignServer(fout, dopt, (ForeignServerInfo *) dobj);
break;
case DO_DEFAULT_ACL:
- dumpDefaultACL(fout, (DefaultACLInfo *) dobj);
+ dumpDefaultACL(fout, dopt, (DefaultACLInfo *) dobj);
break;
case DO_BLOB:
- dumpBlob(fout, (BlobInfo *) dobj);
+ dumpBlob(fout, dopt, (BlobInfo *) dobj);
break;
case DO_BLOB_DATA:
ArchiveEntry(fout, dobj->catId, dobj->dumpId,
dumpBlobs, NULL);
break;
case DO_ROW_SECURITY:
- dumpRowSecurity(fout, (RowSecurityInfo *) dobj);
+ dumpRowSecurity(fout, dopt, (RowSecurityInfo *) dobj);
break;
case DO_PRE_DATA_BOUNDARY:
case DO_POST_DATA_BOUNDARY:
* writes out to fout the queries to recreate a user-defined namespace
*/
static void
-dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
+dumpNamespace(Archive *fout, DumpOptions *dopt, NamespaceInfo *nspinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
char *qnspname;
/* Skip if not to be dumped */
- if (!nspinfo->dobj.dump || dataOnly)
+ if (!nspinfo->dobj.dump || dopt->dataOnly)
return;
/* don't dump dummy namespace from pre-7.3 source */
appendPQExpBuffer(labelq, "SCHEMA %s", qnspname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &nspinfo->dobj, labelq->data);
ArchiveEntry(fout, nspinfo->dobj.catId, nspinfo->dobj.dumpId,
NULL, NULL);
/* Dump Schema Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
- dumpACL(fout, nspinfo->dobj.catId, nspinfo->dobj.dumpId, "SCHEMA",
+ dumpACL(fout, dopt, nspinfo->dobj.catId, nspinfo->dobj.dumpId, "SCHEMA",
qnspname, NULL, nspinfo->dobj.name, NULL,
nspinfo->rolname, nspinfo->nspacl);
* writes out to fout the queries to recreate an extension
*/
static void
-dumpExtension(Archive *fout, ExtensionInfo *extinfo)
+dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
char *qextname;
/* Skip if not to be dumped */
- if (!extinfo->dobj.dump || dataOnly)
+ if (!extinfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
appendPQExpBuffer(delq, "DROP EXTENSION %s;\n", qextname);
- if (!binary_upgrade)
+ if (!dopt->binary_upgrade)
{
/*
* In a regular dump, we use IF NOT EXISTS so that there isn't a
NULL, NULL);
/* Dump Extension Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
* writes out to fout the queries to recreate a user-defined type
*/
static void
-dumpType(Archive *fout, TypeInfo *tyinfo)
+dumpType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
/* Skip if not to be dumped */
- if (!tyinfo->dobj.dump || dataOnly)
+ if (!tyinfo->dobj.dump || dopt->dataOnly)
return;
/* Dump out in proper style */
if (tyinfo->typtype == TYPTYPE_BASE)
- dumpBaseType(fout, tyinfo);
+ dumpBaseType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_DOMAIN)
- dumpDomain(fout, tyinfo);
+ dumpDomain(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_COMPOSITE)
- dumpCompositeType(fout, tyinfo);
+ dumpCompositeType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_ENUM)
- dumpEnumType(fout, tyinfo);
+ dumpEnumType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_RANGE)
- dumpRangeType(fout, tyinfo);
+ dumpRangeType(fout, dopt, tyinfo);
else
write_msg(NULL, "WARNING: typtype of data type \"%s\" appears to be invalid\n",
tyinfo->dobj.name);
* writes out to fout the queries to recreate a user-defined enum type
*/
static void
-dumpEnumType(Archive *fout, TypeInfo *tyinfo)
+dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
appendPQExpBuffer(delq, "%s;\n",
qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_type_oid(fout, q,
tyinfo->dobj.catId.oid);
appendPQExpBuffer(q, "CREATE TYPE %s AS ENUM (",
qtypname);
- if (!binary_upgrade)
+ if (!dopt->binary_upgrade)
{
/* Labels with server-assigned oids */
for (i = 0; i < num; i++)
appendPQExpBufferStr(q, "\n);\n");
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
{
/* Labels with dump-assigned (preserved) oids */
for (i = 0; i < num; i++)
appendPQExpBuffer(labelq, "TYPE %s", qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data);
ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId,
NULL, NULL);
/* Dump Type Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpACL(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
+ dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
* writes out to fout the queries to recreate a user-defined range type
*/
static void
-dumpRangeType(Archive *fout, TypeInfo *tyinfo)
+dumpRangeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
appendPQExpBuffer(delq, "%s;\n",
qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_type_oid(fout,
q, tyinfo->dobj.catId.oid);
appendPQExpBuffer(labelq, "TYPE %s", qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data);
ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId,
NULL, NULL);
/* Dump Type Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpACL(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
+ dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
* writes out to fout the queries to recreate a user-defined base type
*/
static void
-dumpBaseType(Archive *fout, TypeInfo *tyinfo)
+dumpBaseType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
qtypname);
/* We might already have a shell type, but setting pg_type_oid is harmless */
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_type_oid(fout, q,
tyinfo->dobj.catId.oid);
appendPQExpBuffer(labelq, "TYPE %s", qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data);
ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId,
NULL, NULL);
/* Dump Type Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpACL(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
+ dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
* writes out to fout the queries to recreate a user-defined domain
*/
static void
-dumpDomain(Archive *fout, TypeInfo *tyinfo)
+dumpDomain(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
typdefault = NULL;
typcollation = atooid(PQgetvalue(res, 0, PQfnumber(res, "typcollation")));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_type_oid(fout, q,
tyinfo->dobj.catId.oid);
appendPQExpBuffer(labelq, "DOMAIN %s", qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data);
ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId,
NULL, NULL);
/* Dump Domain Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpACL(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
+ dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
* composite type
*/
static void
-dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
+dumpCompositeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer dropped = createPQExpBuffer();
i_attcollation = PQfnumber(res, "attcollation");
i_typrelid = PQfnumber(res, "typrelid");
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
{
Oid typrelid = atooid(PQgetvalue(res, 0, i_typrelid));
attisdropped = (PQgetvalue(res, i, i_attisdropped)[0] == 't');
attcollation = atooid(PQgetvalue(res, i, i_attcollation));
- if (attisdropped && !binary_upgrade)
+ if (attisdropped && !dopt->binary_upgrade)
continue;
/* Format properly if not first attr */
appendPQExpBuffer(labelq, "TYPE %s", qtypname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tyinfo->dobj, labelq->data);
ArchiveEntry(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId,
/* Dump Type Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
- dumpACL(fout, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
+ dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
* We dump a shell definition in advance of the I/O functions for the type.
*/
static void
-dumpShellType(Archive *fout, ShellTypeInfo *stinfo)
+dumpShellType(Archive *fout, DumpOptions *dopt, ShellTypeInfo *stinfo)
{
PQExpBuffer q;
/* Skip if not to be dumped */
- if (!stinfo->dobj.dump || dataOnly)
+ if (!stinfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
* after it's filled in, otherwise the backend complains.
*/
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_type_oid(fout, q,
stinfo->baseType->dobj.catId.oid);
* That case isn't checked here either.
*/
static bool
-shouldDumpProcLangs(void)
+shouldDumpProcLangs(DumpOptions *dopt)
{
- if (!include_everything)
+ if (!dopt->include_everything)
return false;
/* And they're schema not data */
- if (dataOnly)
+ if (dopt->dataOnly)
return false;
return true;
}
* procedural language
*/
static void
-dumpProcLang(Archive *fout, ProcLangInfo *plang)
+dumpProcLang(Archive *fout, DumpOptions *dopt, ProcLangInfo *plang)
{
PQExpBuffer defqry;
PQExpBuffer delqry;
FuncInfo *validatorInfo = NULL;
/* Skip if not to be dumped */
- if (!plang->dobj.dump || dataOnly)
+ if (!plang->dobj.dump || dopt->dataOnly)
return;
/*
if (!plang->dobj.ext_member)
{
- if (!useParams && !shouldDumpProcLangs())
+ if (!useParams && !shouldDumpProcLangs(dopt))
return;
}
appendPQExpBuffer(labelq, "LANGUAGE %s", qlanname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(defqry, &plang->dobj, labelq->data);
ArchiveEntry(fout, plang->dobj.catId, plang->dobj.dumpId,
NULL, NULL);
/* Dump Proc Lang Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
if (plang->lanpltrusted)
- dumpACL(fout, plang->dobj.catId, plang->dobj.dumpId, "LANGUAGE",
+ dumpACL(fout, dopt, plang->dobj.catId, plang->dobj.dumpId, "LANGUAGE",
qlanname, NULL, plang->dobj.name,
lanschema,
plang->lanowner, plang->lanacl);
* dump out one function
*/
static void
-dumpFunc(Archive *fout, FuncInfo *finfo)
+dumpFunc(Archive *fout, DumpOptions *dopt, FuncInfo *finfo)
{
PQExpBuffer query;
PQExpBuffer q;
int i;
/* Skip if not to be dumped */
- if (!finfo->dobj.dump || dataOnly)
+ if (!finfo->dobj.dump || dopt->dataOnly)
return;
query = createPQExpBuffer();
* where we have bin, use dollar quoting if allowed and src
* contains quote or backslash; else use regular quoting.
*/
- if (disable_dollar_quoting ||
+ if (dopt->disable_dollar_quoting ||
(strchr(prosrc, '\'') == NULL && strchr(prosrc, '\\') == NULL))
appendStringLiteralAH(asPart, prosrc, fout);
else
{
appendPQExpBufferStr(asPart, "AS ");
/* with no bin, dollar quote src unconditionally if allowed */
- if (disable_dollar_quoting)
+ if (dopt->disable_dollar_quoting)
appendStringLiteralAH(asPart, prosrc, fout);
else
appendStringLiteralDQ(asPart, prosrc, NULL);
appendPQExpBuffer(labelq, "FUNCTION %s", funcsig);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &finfo->dobj, labelq->data);
ArchiveEntry(fout, finfo->dobj.catId, finfo->dobj.dumpId,
NULL, NULL);
/* Dump Function Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
finfo->dobj.namespace->dobj.name, finfo->rolname,
finfo->dobj.catId, 0, finfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
finfo->dobj.namespace->dobj.name, finfo->rolname,
finfo->dobj.catId, 0, finfo->dobj.dumpId);
- dumpACL(fout, finfo->dobj.catId, finfo->dobj.dumpId, "FUNCTION",
+ dumpACL(fout, dopt, finfo->dobj.catId, finfo->dobj.dumpId, "FUNCTION",
funcsig, NULL, funcsig_tag,
finfo->dobj.namespace->dobj.name,
finfo->rolname, finfo->proacl);
* Dump a user-defined cast
*/
static void
-dumpCast(Archive *fout, CastInfo *cast)
+dumpCast(Archive *fout, DumpOptions *dopt, CastInfo *cast)
{
PQExpBuffer defqry;
PQExpBuffer delqry;
FuncInfo *funcInfo = NULL;
/* Skip if not to be dumped */
- if (!cast->dobj.dump || dataOnly)
+ if (!cast->dobj.dump || dopt->dataOnly)
return;
/* Cannot dump if we don't have the cast function's info */
getFormattedTypeName(fout, cast->castsource, zeroAsNone),
getFormattedTypeName(fout, cast->casttarget, zeroAsNone));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(defqry, &cast->dobj, labelq->data);
ArchiveEntry(fout, cast->dobj.catId, cast->dobj.dumpId,
NULL, NULL);
/* Dump Cast Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, "",
cast->dobj.catId, 0, cast->dobj.dumpId);
* write out a single operator definition
*/
static void
-dumpOpr(Archive *fout, OprInfo *oprinfo)
+dumpOpr(Archive *fout, DumpOptions *dopt, OprInfo *oprinfo)
{
PQExpBuffer query;
PQExpBuffer q;
char *oprref;
/* Skip if not to be dumped */
- if (!oprinfo->dobj.dump || dataOnly)
+ if (!oprinfo->dobj.dump || dopt->dataOnly)
return;
/*
appendPQExpBuffer(labelq, "OPERATOR %s", oprid->data);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &oprinfo->dobj, labelq->data);
ArchiveEntry(fout, oprinfo->dobj.catId, oprinfo->dobj.dumpId,
NULL, NULL);
/* Dump Operator Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
oprinfo->dobj.namespace->dobj.name, oprinfo->rolname,
oprinfo->dobj.catId, 0, oprinfo->dobj.dumpId);
* write out a single operator class definition
*/
static void
-dumpOpclass(Archive *fout, OpclassInfo *opcinfo)
+dumpOpclass(Archive *fout, DumpOptions *dopt, OpclassInfo *opcinfo)
{
PQExpBuffer query;
PQExpBuffer q;
int i;
/* Skip if not to be dumped */
- if (!opcinfo->dobj.dump || dataOnly)
+ if (!opcinfo->dobj.dump || dopt->dataOnly)
return;
/*
appendPQExpBuffer(labelq, " USING %s",
fmtId(amname));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &opcinfo->dobj, labelq->data);
ArchiveEntry(fout, opcinfo->dobj.catId, opcinfo->dobj.dumpId,
NULL, NULL);
/* Dump Operator Class Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, opcinfo->rolname,
opcinfo->dobj.catId, 0, opcinfo->dobj.dumpId);
* specific opclass within the opfamily.
*/
static void
-dumpOpfamily(Archive *fout, OpfamilyInfo *opfinfo)
+dumpOpfamily(Archive *fout, DumpOptions *dopt, OpfamilyInfo *opfinfo)
{
PQExpBuffer query;
PQExpBuffer q;
int i;
/* Skip if not to be dumped */
- if (!opfinfo->dobj.dump || dataOnly)
+ if (!opfinfo->dobj.dump || dopt->dataOnly)
return;
/*
appendPQExpBuffer(labelq, " USING %s",
fmtId(amname));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &opfinfo->dobj, labelq->data);
ArchiveEntry(fout, opfinfo->dobj.catId, opfinfo->dobj.dumpId,
NULL, NULL);
/* Dump Operator Family Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, opfinfo->rolname,
opfinfo->dobj.catId, 0, opfinfo->dobj.dumpId);
* write out a single collation definition
*/
static void
-dumpCollation(Archive *fout, CollInfo *collinfo)
+dumpCollation(Archive *fout, DumpOptions *dopt, CollInfo *collinfo)
{
PQExpBuffer query;
PQExpBuffer q;
const char *collctype;
/* Skip if not to be dumped */
- if (!collinfo->dobj.dump || dataOnly)
+ if (!collinfo->dobj.dump || dopt->dataOnly)
return;
query = createPQExpBuffer();
appendPQExpBuffer(labelq, "COLLATION %s", fmtId(collinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &collinfo->dobj, labelq->data);
ArchiveEntry(fout, collinfo->dobj.catId, collinfo->dobj.dumpId,
NULL, NULL);
/* Dump Collation Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
collinfo->dobj.namespace->dobj.name, collinfo->rolname,
collinfo->dobj.catId, 0, collinfo->dobj.dumpId);
* write out a single conversion definition
*/
static void
-dumpConversion(Archive *fout, ConvInfo *convinfo)
+dumpConversion(Archive *fout, DumpOptions *dopt, ConvInfo *convinfo)
{
PQExpBuffer query;
PQExpBuffer q;
bool condefault;
/* Skip if not to be dumped */
- if (!convinfo->dobj.dump || dataOnly)
+ if (!convinfo->dobj.dump || dopt->dataOnly)
return;
query = createPQExpBuffer();
appendPQExpBuffer(labelq, "CONVERSION %s", fmtId(convinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &convinfo->dobj, labelq->data);
ArchiveEntry(fout, convinfo->dobj.catId, convinfo->dobj.dumpId,
NULL, NULL);
/* Dump Conversion Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
convinfo->dobj.namespace->dobj.name, convinfo->rolname,
convinfo->dobj.catId, 0, convinfo->dobj.dumpId);
* write out a single aggregate definition
*/
static void
-dumpAgg(Archive *fout, AggInfo *agginfo)
+dumpAgg(Archive *fout, DumpOptions *dopt, AggInfo *agginfo)
{
PQExpBuffer query;
PQExpBuffer q;
bool convertok;
/* Skip if not to be dumped */
- if (!agginfo->aggfn.dobj.dump || dataOnly)
+ if (!agginfo->aggfn.dobj.dump || dopt->dataOnly)
return;
query = createPQExpBuffer();
appendPQExpBuffer(labelq, "AGGREGATE %s", aggsig);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &agginfo->aggfn.dobj, labelq->data);
ArchiveEntry(fout, agginfo->aggfn.dobj.catId, agginfo->aggfn.dobj.dumpId,
NULL, NULL);
/* Dump Aggregate Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
agginfo->aggfn.dobj.namespace->dobj.name, agginfo->aggfn.rolname,
agginfo->aggfn.dobj.catId, 0, agginfo->aggfn.dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
agginfo->aggfn.dobj.namespace->dobj.name, agginfo->aggfn.rolname,
agginfo->aggfn.dobj.catId, 0, agginfo->aggfn.dobj.dumpId);
aggsig = format_function_signature(fout, &agginfo->aggfn, true);
aggsig_tag = format_function_signature(fout, &agginfo->aggfn, false);
- dumpACL(fout, agginfo->aggfn.dobj.catId, agginfo->aggfn.dobj.dumpId,
+ dumpACL(fout, dopt, agginfo->aggfn.dobj.catId, agginfo->aggfn.dobj.dumpId,
"FUNCTION",
aggsig, NULL, aggsig_tag,
agginfo->aggfn.dobj.namespace->dobj.name,
* write out a single text search parser
*/
static void
-dumpTSParser(Archive *fout, TSParserInfo *prsinfo)
+dumpTSParser(Archive *fout, DumpOptions *dopt, TSParserInfo *prsinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
/* Skip if not to be dumped */
- if (!prsinfo->dobj.dump || dataOnly)
+ if (!prsinfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "TEXT SEARCH PARSER %s",
fmtId(prsinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &prsinfo->dobj, labelq->data);
ArchiveEntry(fout, prsinfo->dobj.catId, prsinfo->dobj.dumpId,
NULL, NULL);
/* Dump Parser Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, "",
prsinfo->dobj.catId, 0, prsinfo->dobj.dumpId);
* write out a single text search dictionary
*/
static void
-dumpTSDictionary(Archive *fout, TSDictInfo *dictinfo)
+dumpTSDictionary(Archive *fout, DumpOptions *dopt, TSDictInfo *dictinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
char *tmplname;
/* Skip if not to be dumped */
- if (!dictinfo->dobj.dump || dataOnly)
+ if (!dictinfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "TEXT SEARCH DICTIONARY %s",
fmtId(dictinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &dictinfo->dobj, labelq->data);
ArchiveEntry(fout, dictinfo->dobj.catId, dictinfo->dobj.dumpId,
NULL, NULL);
/* Dump Dictionary Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, dictinfo->rolname,
dictinfo->dobj.catId, 0, dictinfo->dobj.dumpId);
* write out a single text search template
*/
static void
-dumpTSTemplate(Archive *fout, TSTemplateInfo *tmplinfo)
+dumpTSTemplate(Archive *fout, DumpOptions *dopt, TSTemplateInfo *tmplinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
/* Skip if not to be dumped */
- if (!tmplinfo->dobj.dump || dataOnly)
+ if (!tmplinfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "TEXT SEARCH TEMPLATE %s",
fmtId(tmplinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tmplinfo->dobj, labelq->data);
ArchiveEntry(fout, tmplinfo->dobj.catId, tmplinfo->dobj.dumpId,
NULL, NULL);
/* Dump Template Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, "",
tmplinfo->dobj.catId, 0, tmplinfo->dobj.dumpId);
* write out a single text search configuration
*/
static void
-dumpTSConfig(Archive *fout, TSConfigInfo *cfginfo)
+dumpTSConfig(Archive *fout, DumpOptions *dopt, TSConfigInfo *cfginfo)
{
PQExpBuffer q;
PQExpBuffer delq;
int i_dictname;
/* Skip if not to be dumped */
- if (!cfginfo->dobj.dump || dataOnly)
+ if (!cfginfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "TEXT SEARCH CONFIGURATION %s",
fmtId(cfginfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &cfginfo->dobj, labelq->data);
ArchiveEntry(fout, cfginfo->dobj.catId, cfginfo->dobj.dumpId,
NULL, NULL);
/* Dump Configuration Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, cfginfo->rolname,
cfginfo->dobj.catId, 0, cfginfo->dobj.dumpId);
* write out a single foreign-data wrapper definition
*/
static void
-dumpForeignDataWrapper(Archive *fout, FdwInfo *fdwinfo)
+dumpForeignDataWrapper(Archive *fout, DumpOptions *dopt, FdwInfo *fdwinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
char *qfdwname;
/* Skip if not to be dumped */
- if (!fdwinfo->dobj.dump || dataOnly)
+ if (!fdwinfo->dobj.dump || dopt->dataOnly)
return;
/*
* field. Otherwise omit them if we are only dumping some specific object.
*/
if (!fdwinfo->dobj.ext_member)
- if (!include_everything)
+ if (!dopt->include_everything)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "FOREIGN DATA WRAPPER %s",
qfdwname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &fdwinfo->dobj, labelq->data);
ArchiveEntry(fout, fdwinfo->dobj.catId, fdwinfo->dobj.dumpId,
NULL, NULL);
/* Handle the ACL */
- dumpACL(fout, fdwinfo->dobj.catId, fdwinfo->dobj.dumpId,
+ dumpACL(fout, dopt, fdwinfo->dobj.catId, fdwinfo->dobj.dumpId,
"FOREIGN DATA WRAPPER",
qfdwname, NULL, fdwinfo->dobj.name,
NULL, fdwinfo->rolname,
fdwinfo->fdwacl);
/* Dump Foreign Data Wrapper Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, fdwinfo->rolname,
fdwinfo->dobj.catId, 0, fdwinfo->dobj.dumpId);
* write out a foreign server definition
*/
static void
-dumpForeignServer(Archive *fout, ForeignServerInfo *srvinfo)
+dumpForeignServer(Archive *fout, DumpOptions *dopt, ForeignServerInfo *srvinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
char *fdwname;
/* Skip if not to be dumped */
- if (!srvinfo->dobj.dump || dataOnly || !include_everything)
+ if (!srvinfo->dobj.dump || dopt->dataOnly || !dopt->include_everything)
return;
q = createPQExpBuffer();
appendPQExpBuffer(labelq, "SERVER %s", qsrvname);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &srvinfo->dobj, labelq->data);
ArchiveEntry(fout, srvinfo->dobj.catId, srvinfo->dobj.dumpId,
NULL, NULL);
/* Handle the ACL */
- dumpACL(fout, srvinfo->dobj.catId, srvinfo->dobj.dumpId,
+ dumpACL(fout, dopt, srvinfo->dobj.catId, srvinfo->dobj.dumpId,
"FOREIGN SERVER",
qsrvname, NULL, srvinfo->dobj.name,
NULL, srvinfo->rolname,
srvinfo->dobj.catId, srvinfo->dobj.dumpId);
/* Dump Foreign Server Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, srvinfo->rolname,
srvinfo->dobj.catId, 0, srvinfo->dobj.dumpId);
* Write out default privileges information
*/
static void
-dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo)
+dumpDefaultACL(Archive *fout, DumpOptions *dopt, DefaultACLInfo *daclinfo)
{
PQExpBuffer q;
PQExpBuffer tag;
const char *type;
/* Skip if not to be dumped */
- if (!daclinfo->dobj.dump || dataOnly || aclsSkip)
+ if (!daclinfo->dobj.dump || dopt->dataOnly || dopt->aclsSkip)
return;
q = createPQExpBuffer();
*----------
*/
static void
-dumpACL(Archive *fout, CatalogId objCatId, DumpId objDumpId,
+dumpACL(Archive *fout, DumpOptions *dopt, CatalogId objCatId, DumpId objDumpId,
const char *type, const char *name, const char *subname,
const char *tag, const char *nspname, const char *owner,
const char *acls)
PQExpBuffer sql;
/* Do nothing if ACL dump is not enabled */
- if (aclsSkip)
+ if (dopt->aclsSkip)
return;
/* --data-only skips ACLs *except* BLOB ACLs */
- if (dataOnly && strcmp(type, "LARGE OBJECT") != 0)
+ if (dopt->dataOnly && strcmp(type, "LARGE OBJECT") != 0)
return;
sql = createPQExpBuffer();
* calling ArchiveEntry() for the specified object.
*/
static void
-dumpSecLabel(Archive *fout, const char *target,
+dumpSecLabel(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
PQExpBuffer query;
/* do nothing, if --no-security-labels is supplied */
- if (no_security_labels)
+ if (dopt->no_security_labels)
return;
/* Comments are schema not data ... except blob comments are data */
if (strncmp(target, "LARGE OBJECT ", 13) != 0)
{
- if (dataOnly)
+ if (dopt->dataOnly)
return;
}
else
{
- if (schemaOnly)
+ if (dopt->schemaOnly)
return;
}
* and its columns.
*/
static void
-dumpTableSecLabel(Archive *fout, TableInfo *tbinfo, const char *reltypename)
+dumpTableSecLabel(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo, const char *reltypename)
{
SecLabelItem *labels;
int nlabels;
PQExpBuffer target;
/* do nothing, if --no-security-labels is supplied */
- if (no_security_labels)
+ if (dopt->no_security_labels)
return;
/* SecLabel are SCHEMA not data */
- if (dataOnly)
+ if (dopt->dataOnly)
return;
/* Search for comments associated with relation, using table */
* write out to fout the declarations (not data) of a user-defined table
*/
static void
-dumpTable(Archive *fout, TableInfo *tbinfo)
+dumpTable(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
- if (tbinfo->dobj.dump && !dataOnly)
+ if (tbinfo->dobj.dump && !dopt->dataOnly)
{
char *namecopy;
if (tbinfo->relkind == RELKIND_SEQUENCE)
- dumpSequence(fout, tbinfo);
+ dumpSequence(fout, dopt, tbinfo);
else
- dumpTableSchema(fout, tbinfo);
+ dumpTableSchema(fout, dopt, tbinfo);
/* Handle the ACL here */
namecopy = pg_strdup(fmtId(tbinfo->dobj.name));
- dumpACL(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
+ dumpACL(fout, dopt, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
(tbinfo->relkind == RELKIND_SEQUENCE) ? "SEQUENCE" :
"TABLE",
namecopy, NULL, tbinfo->dobj.name,
attnamecopy = pg_strdup(fmtId(attname));
acltag = psprintf("%s.%s", tbinfo->dobj.name, attname);
/* Column's GRANT type is always TABLE */
- dumpACL(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId, "TABLE",
+ dumpACL(fout, dopt, tbinfo->dobj.catId, tbinfo->dobj.dumpId, "TABLE",
namecopy, attnamecopy, acltag,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
attacl);
* write the declaration (not data) of one user-defined table or view
*/
static void
-dumpTableSchema(Archive *fout, TableInfo *tbinfo)
+dumpTableSchema(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
/* Make sure we are in proper schema */
selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_type_oids_by_rel_oid(fout, q,
tbinfo->dobj.catId.oid);
appendPQExpBuffer(delq, "%s;\n",
fmtId(tbinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_pg_class_oids(fout, q,
tbinfo->dobj.catId.oid, false);
appendPQExpBuffer(labelq, "%s %s", reltypename,
fmtId(tbinfo->dobj.name));
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_pg_class_oids(fout, q,
tbinfo->dobj.catId.oid, false);
* Attach to type, if reloftype; except in case of a binary upgrade,
* we dump the table normally and attach it to the type afterward.
*/
- if (tbinfo->reloftype && !binary_upgrade)
+ if (tbinfo->reloftype && !dopt->binary_upgrade)
appendPQExpBuffer(q, " OF %s", tbinfo->reloftype);
if (tbinfo->relkind != RELKIND_MATVIEW)
* columns, and then fix up the dropped and nonlocal cases
* below.
*/
- if (shouldPrintColumn(tbinfo, j))
+ if (shouldPrintColumn(dopt, tbinfo, j))
{
/*
* Default value --- suppress if to be printed separately.
*/
bool has_notnull = (tbinfo->notnull[j] &&
(!tbinfo->inhNotNull[j] ||
- binary_upgrade));
+ dopt->binary_upgrade));
/* Skip column if fully defined by reloftype */
if (tbinfo->reloftype &&
- !has_default && !has_notnull && !binary_upgrade)
+ !has_default && !has_notnull && !dopt->binary_upgrade)
continue;
/* Format properly if not first attr */
}
/* Attribute type */
- if (tbinfo->reloftype && !binary_upgrade)
+ if (tbinfo->reloftype && !dopt->binary_upgrade)
{
appendPQExpBufferStr(q, " WITH OPTIONS");
}
if (actual_atts)
appendPQExpBufferStr(q, "\n)");
- else if (!(tbinfo->reloftype && !binary_upgrade))
+ else if (!(tbinfo->reloftype && !dopt->binary_upgrade))
{
/*
* We must have a parenthesized attribute list, even though
appendPQExpBufferStr(q, " (\n)");
}
- if (numParents > 0 && !binary_upgrade)
+ if (numParents > 0 && !dopt->binary_upgrade)
{
appendPQExpBufferStr(q, "\nINHERITS (");
for (k = 0; k < numParents; k++)
* attislocal correctly, plus fix up any inherited CHECK constraints.
* Analogously, we set up typed tables using ALTER TABLE / OF here.
*/
- if (binary_upgrade && (tbinfo->relkind == RELKIND_RELATION ||
+ if (dopt->binary_upgrade && (tbinfo->relkind == RELKIND_RELATION ||
tbinfo->relkind == RELKIND_FOREIGN_TABLE))
{
for (j = 0; j < tbinfo->numatts; j++)
* REFRESH MATERIALIZED VIEW since it's possible that some underlying
* matview is not populated even though this matview is.
*/
- if (binary_upgrade && tbinfo->relkind == RELKIND_MATVIEW &&
+ if (dopt->binary_upgrade && tbinfo->relkind == RELKIND_MATVIEW &&
tbinfo->relispopulated)
{
appendPQExpBufferStr(q, "\n-- For binary upgrade, mark materialized view as populated\n");
* it is NOT NULL and did not inherit that property from a parent,
* we have to mark it separately.
*/
- if (!shouldPrintColumn(tbinfo, j) &&
+ if (!shouldPrintColumn(dopt, tbinfo, j) &&
tbinfo->notnull[j] && !tbinfo->inhNotNull[j])
{
appendPQExpBuffer(q, "ALTER TABLE ONLY %s ",
}
}
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(q, &tbinfo->dobj, labelq->data);
ArchiveEntry(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
/* Dump Table Comments */
- dumpTableComment(fout, tbinfo, reltypename);
+ dumpTableComment(fout, dopt, tbinfo, reltypename);
/* Dump Table Security Labels */
- dumpTableSecLabel(fout, tbinfo, reltypename);
+ dumpTableSecLabel(fout, dopt, tbinfo, reltypename);
/* Dump comments on inlined table constraints */
for (j = 0; j < tbinfo->ncheck; j++)
if (constr->separate || !constr->conislocal)
continue;
- dumpTableConstraintComment(fout, constr);
+ dumpTableConstraintComment(fout, dopt, constr);
}
destroyPQExpBuffer(q);
* dumpAttrDef --- dump an attribute's default-value declaration
*/
static void
-dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
+dumpAttrDef(Archive *fout, DumpOptions *dopt, AttrDefInfo *adinfo)
{
TableInfo *tbinfo = adinfo->adtable;
int adnum = adinfo->adnum;
PQExpBuffer delq;
/* Skip if table definition not to be dumped */
- if (!tbinfo->dobj.dump || dataOnly)
+ if (!tbinfo->dobj.dump || dopt->dataOnly)
return;
/* Skip if not "separate"; it was dumped in the table's definition */
* write out to fout a user-defined index
*/
static void
-dumpIndex(Archive *fout, IndxInfo *indxinfo)
+dumpIndex(Archive *fout, DumpOptions *dopt, IndxInfo *indxinfo)
{
TableInfo *tbinfo = indxinfo->indextable;
bool is_constraint = (indxinfo->indexconstraint != 0);
PQExpBuffer delq;
PQExpBuffer labelq;
- if (dataOnly)
+ if (dopt->dataOnly)
return;
q = createPQExpBuffer();
*/
if (!is_constraint)
{
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_pg_class_oids(fout, q,
indxinfo->dobj.catId.oid, true);
}
/* Dump Index Comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
indxinfo->dobj.catId, 0,
* write out to fout a user-defined constraint
*/
static void
-dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
+dumpConstraint(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo)
{
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer q;
PQExpBuffer delq;
/* Skip if not to be dumped */
- if (!coninfo->dobj.dump || dataOnly)
+ if (!coninfo->dobj.dump || dopt->dataOnly)
return;
q = createPQExpBuffer();
exit_horribly(NULL, "missing index for constraint \"%s\"\n",
coninfo->dobj.name);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_set_pg_class_oids(fout, q,
indxinfo->dobj.catId.oid, true);
/* Dump Constraint Comments --- only works for table constraints */
if (tbinfo && coninfo->separate)
- dumpTableConstraintComment(fout, coninfo);
+ dumpTableConstraintComment(fout, dopt, coninfo);
destroyPQExpBuffer(q);
destroyPQExpBuffer(delq);
* or as a separate ALTER command.
*/
static void
-dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
+dumpTableConstraintComment(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo)
{
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer labelq = createPQExpBuffer();
fmtId(coninfo->dobj.name));
appendPQExpBuffer(labelq, "ON %s",
fmtId(tbinfo->dobj.name));
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
coninfo->dobj.catId, 0,
* write the declaration (not data) of one user-defined sequence
*/
static void
-dumpSequence(Archive *fout, TableInfo *tbinfo)
+dumpSequence(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
PGresult *res;
char *startv,
resetPQExpBuffer(query);
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
{
binary_upgrade_set_pg_class_oids(fout, query,
tbinfo->dobj.catId.oid, false);
/* binary_upgrade: no need to clear TOAST table oid */
- if (binary_upgrade)
+ if (dopt->binary_upgrade)
binary_upgrade_extension_member(query, &tbinfo->dobj,
labelq->data);
}
/* Dump Sequence Comments and Security Labels */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
- dumpSecLabel(fout, labelq->data,
+ dumpSecLabel(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
* write the declaration of one user-defined table trigger
*/
static void
-dumpTrigger(Archive *fout, TriggerInfo *tginfo)
+dumpTrigger(Archive *fout, DumpOptions *dopt, TriggerInfo *tginfo)
{
TableInfo *tbinfo = tginfo->tgtable;
PQExpBuffer query;
* we needn't check dobj.dump because TriggerInfo wouldn't have been
* created in the first place for non-dumpable triggers
*/
- if (dataOnly)
+ if (dopt->dataOnly)
return;
query = createPQExpBuffer();
NULL, 0,
NULL, NULL);
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tginfo->dobj.catId, 0, tginfo->dobj.dumpId);
* write the declaration of one user-defined event trigger
*/
static void
-dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
+dumpEventTrigger(Archive *fout, DumpOptions *dopt, EventTriggerInfo *evtinfo)
{
PQExpBuffer query;
PQExpBuffer labelq;
/* Skip if not to be dumped */
- if (!evtinfo->dobj.dump || dataOnly)
+ if (!evtinfo->dobj.dump || dopt->dataOnly)
return;
query = createPQExpBuffer();
"EVENT TRIGGER", SECTION_POST_DATA,
query->data, "", NULL, NULL, 0, NULL, NULL);
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
NULL, NULL,
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
* Dump a rule
*/
static void
-dumpRule(Archive *fout, RuleInfo *rinfo)
+dumpRule(Archive *fout, DumpOptions *dopt, RuleInfo *rinfo)
{
TableInfo *tbinfo = rinfo->ruletable;
PQExpBuffer query;
PGresult *res;
/* Skip if not to be dumped */
- if (!rinfo->dobj.dump || dataOnly)
+ if (!rinfo->dobj.dump || dopt->dataOnly)
return;
/*
NULL, NULL);
/* Dump rule comments */
- dumpComment(fout, labelq->data,
+ dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
rinfo->dobj.catId, 0, rinfo->dobj.dumpId);
* getExtensionMembership --- obtain extension membership data
*/
void
-getExtensionMembership(Archive *fout, ExtensionInfo extinfo[],
+getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[],
int numExtensions)
{
PQExpBuffer query;
* idea is to exactly reproduce the database contents rather than
* replace the extension contents with something different.
*/
- if (!binary_upgrade)
+ if (!dopt->binary_upgrade)
dobj->dump = false;
else
dobj->dump = refdobj->dump;
* of the --oids setting. This is because row filtering
* conditions aren't compatible with dumping OIDs.
*/
- makeTableDataInfo(configtbl, false);
+ makeTableDataInfo(dopt, configtbl, false);
if (configtbl->dataObj != NULL)
{
if (strlen(extconditionarray[j]) > 0)