I wrote:
> BTW, the bulk of the changes in this patch are just there to pass down
> the DumpOptions struct to where it's needed, following some pre-existing
> work that passed that around as a separate pointer. I wonder why things
> were done that way, rather than adding a DumpOptions pointer in the
> Archive struct? The vast majority of the functions I had to touch already
> had an Archive* parameter, and would not have needed to be touched if it
> were done the other way. I'm tempted to push a preliminary patch that
> adds such a field and gets rid of DumpOptions as a separate parameter
> to anything that also takes an Archive* pointer.
Specifically, something like the attached, which is bulky but mostly
mechanical. This undoes a lot of API changes introduced by 0eea8047bf
to pass DumpOptions as a separate argument to assorted functions.
I think this is a good idea because (a) those changes were pretty random
and incomplete, as evidenced by the fact that I had to do a bunch more of
them in my upthread patch; (b) this significantly reduces the delta
between 9.5/HEAD and pre-9.5 code in pg_dump, which will no doubt ease
future back-patching. So unless I hear objections, I plan to push this
pretty soon.
regards, tom lane
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index 7869ee9..3b4e478 100644
*** a/src/bin/pg_dump/common.c
--- b/src/bin/pg_dump/common.c
*************** static int strInArray(const char *patter
*** 81,87 ****
* Collect information about all potentially dumpable objects
*/
TableInfo *
! getSchemaData(Archive *fout, DumpOptions *dopt, int *numTablesPtr)
{
ExtensionInfo *extinfo;
InhInfo *inhinfo;
--- 81,87 ----
* Collect information about all potentially dumpable objects
*/
TableInfo *
! getSchemaData(Archive *fout, int *numTablesPtr)
{
ExtensionInfo *extinfo;
InhInfo *inhinfo;
*************** getSchemaData(Archive *fout, DumpOptions
*** 118,124 ****
*/
if (g_verbose)
write_msg(NULL, "reading user-defined tables\n");
! tblinfo = getTables(fout, dopt, &numTables);
tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
/* Do this after we've built tblinfoindex */
--- 118,124 ----
*/
if (g_verbose)
write_msg(NULL, "reading user-defined tables\n");
! tblinfo = getTables(fout, &numTables);
tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
/* Do this after we've built tblinfoindex */
*************** getSchemaData(Archive *fout, DumpOptions
*** 126,136 ****
if (g_verbose)
write_msg(NULL, "reading extensions\n");
! extinfo = getExtensions(fout, dopt, &numExtensions);
if (g_verbose)
write_msg(NULL, "reading user-defined functions\n");
! funinfo = getFuncs(fout, dopt, &numFuncs);
funinfoindex = buildIndexArray(funinfo, numFuncs, sizeof(FuncInfo));
/* this must be after getTables and getFuncs */
--- 126,136 ----
if (g_verbose)
write_msg(NULL, "reading extensions\n");
! extinfo = getExtensions(fout, &numExtensions);
if (g_verbose)
write_msg(NULL, "reading user-defined functions\n");
! funinfo = getFuncs(fout, &numFuncs);
funinfoindex = buildIndexArray(funinfo, numFuncs, sizeof(FuncInfo));
/* this must be after getTables and getFuncs */
*************** getSchemaData(Archive *fout, DumpOptions
*** 146,152 ****
if (g_verbose)
write_msg(NULL, "reading user-defined aggregate functions\n");
! getAggregates(fout, dopt, &numAggregates);
if (g_verbose)
write_msg(NULL, "reading user-defined operators\n");
--- 146,152 ----
if (g_verbose)
write_msg(NULL, "reading user-defined aggregate functions\n");
! getAggregates(fout, &numAggregates);
if (g_verbose)
write_msg(NULL, "reading user-defined operators\n");
*************** getSchemaData(Archive *fout, DumpOptions
*** 187,193 ****
if (g_verbose)
write_msg(NULL, "reading default privileges\n");
! getDefaultACLs(fout, dopt, &numDefaultACLs);
if (g_verbose)
write_msg(NULL, "reading user-defined collations\n");
--- 187,193 ----
if (g_verbose)
write_msg(NULL, "reading default privileges\n");
! getDefaultACLs(fout, &numDefaultACLs);
if (g_verbose)
write_msg(NULL, "reading user-defined collations\n");
*************** getSchemaData(Archive *fout, DumpOptions
*** 200,206 ****
if (g_verbose)
write_msg(NULL, "reading type casts\n");
! getCasts(fout, dopt, &numCasts);
if (g_verbose)
write_msg(NULL, "reading transforms\n");
--- 200,206 ----
if (g_verbose)
write_msg(NULL, "reading type casts\n");
! getCasts(fout, &numCasts);
if (g_verbose)
write_msg(NULL, "reading transforms\n");
*************** getSchemaData(Archive *fout, DumpOptions
*** 221,227 ****
*/
if (g_verbose)
write_msg(NULL, "finding extension members\n");
! getExtensionMembership(fout, dopt, extinfo, numExtensions);
/* Link tables to parents, mark parents of target tables interesting */
if (g_verbose)
--- 221,227 ----
*/
if (g_verbose)
write_msg(NULL, "finding extension members\n");
! getExtensionMembership(fout, extinfo, numExtensions);
/* Link tables to parents, mark parents of target tables interesting */
if (g_verbose)
*************** getSchemaData(Archive *fout, DumpOptions
*** 230,240 ****
if (g_verbose)
write_msg(NULL, "reading column info for interesting tables\n");
! getTableAttrs(fout, dopt, tblinfo, numTables);
if (g_verbose)
write_msg(NULL, "flagging inherited columns in subtables\n");
! flagInhAttrs(dopt, tblinfo, numTables);
if (g_verbose)
write_msg(NULL, "reading indexes\n");
--- 230,240 ----
if (g_verbose)
write_msg(NULL, "reading column info for interesting tables\n");
! getTableAttrs(fout, tblinfo, numTables);
if (g_verbose)
write_msg(NULL, "flagging inherited columns in subtables\n");
! flagInhAttrs(fout->dopt, tblinfo, numTables);
if (g_verbose)
write_msg(NULL, "reading indexes\n");
diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c
index ce5e472..d8bd9a9 100644
*** a/src/bin/pg_dump/parallel.c
--- b/src/bin/pg_dump/parallel.c
*************** static int piperead(int s, char *buf, in
*** 46,53 ****
typedef struct
{
ArchiveHandle *AH;
- RestoreOptions *ropt;
- DumpOptions *dopt;
int worker;
int pipeRead;
int pipeWrite;
--- 46,51 ----
*************** static void WaitForTerminatingWorkers(Pa
*** 87,99 ****
#ifndef WIN32
static void sigTermHandler(int signum);
#endif
! static void SetupWorker(ArchiveHandle *AH, int pipefd[2], int worker,
! DumpOptions *dopt,
! RestoreOptions *ropt);
static bool HasEveryWorkerTerminated(ParallelState *pstate);
static void lockTableNoWait(ArchiveHandle *AH, TocEntry *te);
! static void WaitForCommands(ArchiveHandle *AH, DumpOptions *dopt, int pipefd[2]);
static char *getMessageFromMaster(int pipefd[2]);
static void sendMessageToMaster(int pipefd[2], const char *str);
static int select_loop(int maxFd, fd_set *workerset);
--- 85,95 ----
#ifndef WIN32
static void sigTermHandler(int signum);
#endif
! static void SetupWorker(ArchiveHandle *AH, int pipefd[2], int worker);
static bool HasEveryWorkerTerminated(ParallelState *pstate);
static void lockTableNoWait(ArchiveHandle *AH, TocEntry *te);
! static void WaitForCommands(ArchiveHandle *AH, int pipefd[2]);
static char *getMessageFromMaster(int pipefd[2]);
static void sendMessageToMaster(int pipefd[2], const char *str);
static int select_loop(int maxFd, fd_set *workerset);
*************** sigTermHandler(int signum)
*** 435,443 ****
* worker process.
*/
static void
! SetupWorker(ArchiveHandle *AH, int pipefd[2], int worker,
! DumpOptions *dopt,
! RestoreOptions *ropt)
{
/*
* Call the setup worker function that's defined in the ArchiveHandle.
--- 431,437 ----
* worker process.
*/
static void
! SetupWorker(ArchiveHandle *AH, int pipefd[2], int worker)
{
/*
* Call the setup worker function that's defined in the ArchiveHandle.
*************** SetupWorker(ArchiveHandle *AH, int pipef
*** 446,456 ****
* properly when we shut down. This happens only that way when it is
* brought down because of an error.
*/
! (AH->SetupWorkerPtr) ((Archive *) AH, dopt, ropt);
Assert(AH->connection != NULL);
! WaitForCommands(AH, dopt, pipefd);
closesocket(pipefd[PIPE_READ]);
closesocket(pipefd[PIPE_WRITE]);
--- 440,450 ----
* properly when we shut down. This happens only that way when it is
* brought down because of an error.
*/
! (AH->SetupWorkerPtr) ((Archive *) AH);
Assert(AH->connection != NULL);
! WaitForCommands(AH, pipefd);
closesocket(pipefd[PIPE_READ]);
closesocket(pipefd[PIPE_WRITE]);
*************** init_spawned_worker_win32(WorkerInfo *wi
*** 463,475 ****
ArchiveHandle *AH;
int pipefd[2] = {wi->pipeRead, wi->pipeWrite};
int worker = wi->worker;
- DumpOptions *dopt = wi->dopt;
- RestoreOptions *ropt = wi->ropt;
AH = CloneArchive(wi->AH);
free(wi);
! SetupWorker(AH, pipefd, worker, dopt, ropt);
DeCloneArchive(AH);
_endthreadex(0);
--- 457,467 ----
ArchiveHandle *AH;
int pipefd[2] = {wi->pipeRead, wi->pipeWrite};
int worker = wi->worker;
AH = CloneArchive(wi->AH);
free(wi);
! SetupWorker(AH, pipefd, worker);
DeCloneArchive(AH);
_endthreadex(0);
*************** init_spawned_worker_win32(WorkerInfo *wi
*** 483,489 ****
* of threads while it does a fork() on Unix.
*/
ParallelState *
! ParallelBackupStart(ArchiveHandle *AH, DumpOptions *dopt, RestoreOptions *ropt)
{
ParallelState *pstate;
int i;
--- 475,481 ----
* of threads while it does a fork() on Unix.
*/
ParallelState *
! ParallelBackupStart(ArchiveHandle *AH)
{
ParallelState *pstate;
int i;
*************** ParallelBackupStart(ArchiveHandle *AH, D
*** 545,552 ****
/* Allocate a new structure for every worker */
wi = (WorkerInfo *) pg_malloc(sizeof(WorkerInfo));
- wi->ropt = ropt;
- wi->dopt = dopt;
wi->worker = i;
wi->AH = AH;
wi->pipeRead = pstate->parallelSlot[i].pipeRevRead = pipeMW[PIPE_READ];
--- 537,542 ----
*************** ParallelBackupStart(ArchiveHandle *AH, D
*** 601,607 ****
closesocket(pstate->parallelSlot[j].pipeWrite);
}
! SetupWorker(pstate->parallelSlot[i].args->AH, pipefd, i, dopt, ropt);
exit(0);
}
--- 591,597 ----
closesocket(pstate->parallelSlot[j].pipeWrite);
}
! SetupWorker(pstate->parallelSlot[i].args->AH, pipefd, i);
exit(0);
}
*************** lockTableNoWait(ArchiveHandle *AH, TocEn
*** 859,865 ****
* exit.
*/
static void
! WaitForCommands(ArchiveHandle *AH, DumpOptions *dopt, int pipefd[2])
{
char *command;
DumpId dumpId;
--- 849,855 ----
* exit.
*/
static void
! WaitForCommands(ArchiveHandle *AH, int pipefd[2])
{
char *command;
DumpId dumpId;
*************** WaitForCommands(ArchiveHandle *AH, DumpO
*** 899,905 ****
* The message we return here has been pg_malloc()ed and we are
* responsible for free()ing it.
*/
! str = (AH->WorkerJobDumpPtr) (AH, dopt, te);
Assert(AH->connection != NULL);
sendMessageToMaster(pipefd, str);
free(str);
--- 889,895 ----
* The message we return here has been pg_malloc()ed and we are
* responsible for free()ing it.
*/
! str = (AH->WorkerJobDumpPtr) (AH, te);
Assert(AH->connection != NULL);
sendMessageToMaster(pipefd, str);
free(str);
diff --git a/src/bin/pg_dump/parallel.h b/src/bin/pg_dump/parallel.h
index ecceb4e..591653b 100644
*** a/src/bin/pg_dump/parallel.h
--- b/src/bin/pg_dump/parallel.h
*************** extern int ReapWorkerStatus(ParallelStat
*** 76,84 ****
extern void EnsureIdleWorker(ArchiveHandle *AH, ParallelState *pstate);
extern void EnsureWorkersFinished(ArchiveHandle *AH, ParallelState *pstate);
! extern ParallelState *ParallelBackupStart(ArchiveHandle *AH,
! DumpOptions *dopt,
! RestoreOptions *ropt);
extern void DispatchJobForTocEntry(ArchiveHandle *AH,
ParallelState *pstate,
TocEntry *te, T_Action act);
--- 76,82 ----
extern void EnsureIdleWorker(ArchiveHandle *AH, ParallelState *pstate);
extern void EnsureWorkersFinished(ArchiveHandle *AH, ParallelState *pstate);
! extern ParallelState *ParallelBackupStart(ArchiveHandle *AH);
extern void DispatchJobForTocEntry(ArchiveHandle *AH,
ParallelState *pstate,
TocEntry *te, T_Action act);
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 7126749..26061e7 100644
*** a/src/bin/pg_dump/pg_backup.h
--- b/src/bin/pg_dump/pg_backup.h
*************** typedef enum _teSection
*** 58,92 ****
SECTION_POST_DATA /* stuff to be processed after data */
} teSection;
- /*
- * We may want to have some more user-readable data, but in the mean
- * time this gives us some abstraction and type checking.
- */
- typedef struct Archive
- {
- int verbose;
- char *remoteVersionStr; /* server's version string */
- int remoteVersion; /* same in numeric form */
-
- int minRemoteVersion; /* allowable range */
- int maxRemoteVersion;
-
- int numWorkers; /* number of parallel processes */
- char *sync_snapshot_id; /* sync snapshot id for parallel
- * operation */
-
- /* info needed for string escaping */
- int encoding; /* libpq code for client_encoding */
- bool std_strings; /* standard_conforming_strings */
- char *use_role; /* Issue SET ROLE to this */
-
- /* error handling */
- bool exit_on_error; /* whether to exit on SQL errors... */
- int n_errors; /* number of errors (if no die) */
-
- /* The rest is private */
- } Archive;
-
typedef struct _restoreOptions
{
int createDB; /* Issue commands to create the database */
--- 58,63 ----
*************** typedef struct _dumpOptions
*** 190,195 ****
--- 161,198 ----
char *outputSuperuser;
} DumpOptions;
+ /*
+ * We may want to have some more user-readable data, but in the mean
+ * time this gives us some abstraction and type checking.
+ */
+ typedef struct Archive
+ {
+ DumpOptions *dopt; /* options, if dumping */
+ RestoreOptions *ropt; /* options, if restoring */
+
+ int verbose;
+ char *remoteVersionStr; /* server's version string */
+ int remoteVersion; /* same in numeric form */
+
+ int minRemoteVersion; /* allowable range */
+ int maxRemoteVersion;
+
+ int numWorkers; /* number of parallel processes */
+ char *sync_snapshot_id; /* sync snapshot id for parallel
+ * operation */
+
+ /* info needed for string escaping */
+ int encoding; /* libpq code for client_encoding */
+ bool std_strings; /* standard_conforming_strings */
+ char *use_role; /* Issue SET ROLE to this */
+
+ /* error handling */
+ bool exit_on_error; /* whether to exit on SQL errors... */
+ int n_errors; /* number of errors (if no die) */
+
+ /* The rest is private */
+ } Archive;
+
/*
* pg_dump uses two different mechanisms for identifying database objects:
*************** typedef struct
*** 215,223 ****
typedef int DumpId;
! typedef int (*DataDumperPtr) (Archive *AH, DumpOptions *dopt, void *userArg);
! typedef void (*SetupWorkerPtr) (Archive *AH, DumpOptions *dopt, RestoreOptions *ropt);
/*
* Main archiver interface.
--- 218,226 ----
typedef int DumpId;
! typedef int (*DataDumperPtr) (Archive *AH, void *userArg);
! typedef void (*SetupWorkerPtr) (Archive *AH);
/*
* Main archiver interface.
*************** extern void WriteData(Archive *AH, const
*** 250,258 ****
extern int StartBlob(Archive *AH, Oid oid);
extern int EndBlob(Archive *AH, Oid oid);
! extern void CloseArchive(Archive *AH, DumpOptions *dopt);
! extern void SetArchiveRestoreOptions(Archive *AH, RestoreOptions *ropt);
extern void RestoreArchive(Archive *AH);
--- 253,263 ----
extern int StartBlob(Archive *AH, Oid oid);
extern int EndBlob(Archive *AH, Oid oid);
! extern void CloseArchive(Archive *AH);
! extern void SetArchiveOptions(Archive *AH, DumpOptions *dopt, RestoreOptions *ropt);
!
! extern void ProcessArchiveRestoreOptions(Archive *AH);
extern void RestoreArchive(Archive *AH);
*************** extern Archive *CreateArchive(const char
*** 265,271 ****
SetupWorkerPtr setupDumpWorker);
/* The --list option */
! extern void PrintTOCSummary(Archive *AH, RestoreOptions *ropt);
extern RestoreOptions *NewRestoreOptions(void);
--- 270,276 ----
SetupWorkerPtr setupDumpWorker);
/* The --list option */
! extern void PrintTOCSummary(Archive *AH);
extern RestoreOptions *NewRestoreOptions(void);
*************** extern void InitDumpOptions(DumpOptions
*** 274,280 ****
extern DumpOptions *dumpOptionsFromRestoreOptions(RestoreOptions *ropt);
/* Rearrange and filter TOC entries */
! extern void SortTocFromFile(Archive *AHX, RestoreOptions *ropt);
/* Convenience functions used only when writing DATA */
extern void archputs(const char *s, Archive *AH);
--- 279,285 ----
extern DumpOptions *dumpOptionsFromRestoreOptions(RestoreOptions *ropt);
/* Rearrange and filter TOC entries */
! extern void SortTocFromFile(Archive *AHX);
/* Convenience functions used only when writing DATA */
extern void archputs(const char *s, Archive *AH);
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index c33df4d..33e500e 100644
*** a/src/bin/pg_dump/pg_backup_archiver.c
--- b/src/bin/pg_dump/pg_backup_archiver.c
*************** static ArchiveHandle *_allocAH(const cha
*** 57,63 ****
const int compression, ArchiveMode mode, SetupWorkerPtr setupWorkerPtr);
static void _getObjectDescription(PQExpBuffer buf, TocEntry *te,
ArchiveHandle *AH);
! static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isData, bool acl_pass);
static char *replace_line_endings(const char *str);
static void _doSetFixedOutputState(ArchiveHandle *AH);
static void _doSetSessionAuth(ArchiveHandle *AH, const char *user);
--- 57,63 ----
const int compression, ArchiveMode mode, SetupWorkerPtr setupWorkerPtr);
static void _getObjectDescription(PQExpBuffer buf, TocEntry *te,
ArchiveHandle *AH);
! static void _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass);
static char *replace_line_endings(const char *str);
static void _doSetFixedOutputState(ArchiveHandle *AH);
static void _doSetSessionAuth(ArchiveHandle *AH, const char *user);
*************** static void processEncodingEntry(Archive
*** 71,78 ****
static void processStdStringsEntry(ArchiveHandle *AH, TocEntry *te);
static teReqs _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt);
static bool _tocEntryIsACL(TocEntry *te);
! static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
! static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
static void buildTocEntryArrays(ArchiveHandle *AH);
static void _moveBefore(ArchiveHandle *AH, TocEntry *pos, TocEntry *te);
static int _discoverArchiveFormat(ArchiveHandle *AH);
--- 71,78 ----
static void processStdStringsEntry(ArchiveHandle *AH, TocEntry *te);
static teReqs _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt);
static bool _tocEntryIsACL(TocEntry *te);
! static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te);
! static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te);
static void buildTocEntryArrays(ArchiveHandle *AH);
static void _moveBefore(ArchiveHandle *AH, TocEntry *pos, TocEntry *te);
static int _discoverArchiveFormat(ArchiveHandle *AH);
*************** static void SetOutput(ArchiveHandle *AH,
*** 84,91 ****
static OutputContext SaveOutput(ArchiveHandle *AH);
static void RestoreOutput(ArchiveHandle *AH, OutputContext savedContext);
! static int restore_toc_entry(ArchiveHandle *AH, TocEntry *te,
! RestoreOptions *ropt, bool is_parallel);
static void restore_toc_entries_prefork(ArchiveHandle *AH);
static void restore_toc_entries_parallel(ArchiveHandle *AH, ParallelState *pstate,
TocEntry *pending_list);
--- 84,90 ----
static OutputContext SaveOutput(ArchiveHandle *AH);
static void RestoreOutput(ArchiveHandle *AH, OutputContext savedContext);
! static int restore_toc_entry(ArchiveHandle *AH, TocEntry *te, bool is_parallel);
static void restore_toc_entries_prefork(ArchiveHandle *AH);
static void restore_toc_entries_parallel(ArchiveHandle *AH, ParallelState *pstate,
TocEntry *pending_list);
*************** dumpOptionsFromRestoreOptions(RestoreOpt
*** 184,190 ****
* setup doesn't need to know anything much, so it's defined here.
*/
static void
! setupRestoreWorker(Archive *AHX, DumpOptions *dopt, RestoreOptions *ropt)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
--- 183,189 ----
* setup doesn't need to know anything much, so it's defined here.
*/
static void
! setupRestoreWorker(Archive *AHX)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
*************** OpenArchive(const char *FileSpec, const
*** 216,227 ****
/* Public */
void
! CloseArchive(Archive *AHX, DumpOptions *dopt)
{
int res = 0;
ArchiveHandle *AH = (ArchiveHandle *) AHX;
! (*AH->ClosePtr) (AH, dopt);
/* Close the output */
if (AH->gzOut)
--- 215,226 ----
/* Public */
void
! CloseArchive(Archive *AHX)
{
int res = 0;
ArchiveHandle *AH = (ArchiveHandle *) AHX;
! (*AH->ClosePtr) (AH);
/* Close the output */
if (AH->gzOut)
*************** CloseArchive(Archive *AHX, DumpOptions *
*** 236,249 ****
/* Public */
void
! SetArchiveRestoreOptions(Archive *AHX, RestoreOptions *ropt)
{
! ArchiveHandle *AH = (ArchiveHandle *) AHX;
! TocEntry *te;
! teSection curSection;
/* Save options for later access */
AH->ropt = ropt;
/* Decide which TOC entries will be dumped/restored, and mark them */
curSection = SECTION_PRE_DATA;
--- 235,259 ----
/* Public */
void
! SetArchiveOptions(Archive *AH, DumpOptions *dopt, RestoreOptions *ropt)
{
! /* Caller can omit dump options, in which case we synthesize them */
! if (dopt == NULL && ropt != NULL)
! dopt = dumpOptionsFromRestoreOptions(ropt);
/* Save options for later access */
+ AH->dopt = dopt;
AH->ropt = ropt;
+ }
+
+ /* Public */
+ void
+ ProcessArchiveRestoreOptions(Archive *AHX)
+ {
+ ArchiveHandle *AH = (ArchiveHandle *) AHX;
+ RestoreOptions *ropt = AH->public.ropt;
+ TocEntry *te;
+ teSection curSection;
/* Decide which TOC entries will be dumped/restored, and mark them */
curSection = SECTION_PRE_DATA;
*************** void
*** 298,304 ****
RestoreArchive(Archive *AHX)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
! RestoreOptions *ropt = AH->ropt;
bool parallel_mode;
TocEntry *te;
OutputContext sav;
--- 308,314 ----
RestoreArchive(Archive *AHX)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
! RestoreOptions *ropt = AH->public.ropt;
bool parallel_mode;
TocEntry *te;
OutputContext sav;
*************** RestoreArchive(Archive *AHX)
*** 605,611 ****
Assert(AH->connection == NULL);
/* ParallelBackupStart() will actually fork the processes */
! pstate = ParallelBackupStart(AH, NULL, ropt);
restore_toc_entries_parallel(AH, pstate, &pending_list);
ParallelBackupEnd(AH, pstate);
--- 615,621 ----
Assert(AH->connection == NULL);
/* ParallelBackupStart() will actually fork the processes */
! pstate = ParallelBackupStart(AH);
restore_toc_entries_parallel(AH, pstate, &pending_list);
ParallelBackupEnd(AH, pstate);
*************** RestoreArchive(Archive *AHX)
*** 616,622 ****
else
{
for (te = AH->toc->next; te != AH->toc; te = te->next)
! (void) restore_toc_entry(AH, te, ropt, false);
}
/*
--- 626,632 ----
else
{
for (te = AH->toc->next; te != AH->toc; te = te->next)
! (void) restore_toc_entry(AH, te, false);
}
/*
*************** RestoreArchive(Archive *AHX)
*** 636,642 ****
else
ahlog(AH, 1, "setting owner and privileges for %s \"%s\"\n",
te->desc, te->tag);
! _printTocEntry(AH, te, ropt, false, true);
}
}
--- 646,652 ----
else
ahlog(AH, 1, "setting owner and privileges for %s \"%s\"\n",
te->desc, te->tag);
! _printTocEntry(AH, te, false, true);
}
}
*************** RestoreArchive(Archive *AHX)
*** 673,681 ****
* the parallel parent has to make the corresponding status update.
*/
static int
! restore_toc_entry(ArchiveHandle *AH, TocEntry *te,
! RestoreOptions *ropt, bool is_parallel)
{
int status = WORKER_OK;
teReqs reqs;
bool defnDumped;
--- 683,691 ----
* the parallel parent has to make the corresponding status update.
*/
static int
! restore_toc_entry(ArchiveHandle *AH, TocEntry *te, bool is_parallel)
{
+ RestoreOptions *ropt = AH->public.ropt;
int status = WORKER_OK;
teReqs reqs;
bool defnDumped;
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 717,723 ****
ahlog(AH, 1, "creating %s \"%s\"\n", te->desc, te->tag);
! _printTocEntry(AH, te, ropt, false, false);
defnDumped = true;
if (strcmp(te->desc, "TABLE") == 0)
--- 727,733 ----
ahlog(AH, 1, "creating %s \"%s\"\n", te->desc, te->tag);
! _printTocEntry(AH, te, false, false);
defnDumped = true;
if (strcmp(te->desc, "TABLE") == 0)
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 782,788 ****
*/
if (AH->PrintTocDataPtr !=NULL)
{
! _printTocEntry(AH, te, ropt, true, false);
if (strcmp(te->desc, "BLOBS") == 0 ||
strcmp(te->desc, "BLOB COMMENTS") == 0)
--- 792,798 ----
*/
if (AH->PrintTocDataPtr !=NULL)
{
! _printTocEntry(AH, te, true, false);
if (strcmp(te->desc, "BLOBS") == 0 ||
strcmp(te->desc, "BLOB COMMENTS") == 0)
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 795,807 ****
if (strcmp(te->desc, "BLOB COMMENTS") == 0)
AH->outputKind = OUTPUT_OTHERDATA;
! (*AH->PrintTocDataPtr) (AH, te, ropt);
AH->outputKind = OUTPUT_SQLCMDS;
}
else
{
! _disableTriggersIfNecessary(AH, te, ropt);
/* Select owner and schema as necessary */
_becomeOwner(AH, te);
--- 805,817 ----
if (strcmp(te->desc, "BLOB COMMENTS") == 0)
AH->outputKind = OUTPUT_OTHERDATA;
! (*AH->PrintTocDataPtr) (AH, te);
AH->outputKind = OUTPUT_SQLCMDS;
}
else
{
! _disableTriggersIfNecessary(AH, te);
/* Select owner and schema as necessary */
_becomeOwner(AH, te);
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 848,854 ****
else
AH->outputKind = OUTPUT_OTHERDATA;
! (*AH->PrintTocDataPtr) (AH, te, ropt);
/*
* Terminate COPY if needed.
--- 858,864 ----
else
AH->outputKind = OUTPUT_OTHERDATA;
! (*AH->PrintTocDataPtr) (AH, te);
/*
* Terminate COPY if needed.
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 862,868 ****
if (is_parallel && te->created)
CommitTransaction(&AH->public);
! _enableTriggersIfNecessary(AH, te, ropt);
}
}
}
--- 872,878 ----
if (is_parallel && te->created)
CommitTransaction(&AH->public);
! _enableTriggersIfNecessary(AH, te);
}
}
}
*************** restore_toc_entry(ArchiveHandle *AH, Toc
*** 870,876 ****
{
/* If we haven't already dumped the defn part, do so now */
ahlog(AH, 1, "executing %s %s\n", te->desc, te->tag);
! _printTocEntry(AH, te, ropt, false, false);
}
}
--- 880,886 ----
{
/* If we haven't already dumped the defn part, do so now */
ahlog(AH, 1, "executing %s %s\n", te->desc, te->tag);
! _printTocEntry(AH, te, false, false);
}
}
*************** NewRestoreOptions(void)
*** 900,907 ****
}
static void
! _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
/* This hack is only needed in a data-only restore */
if (!ropt->dataOnly || !ropt->disable_triggers)
return;
--- 910,919 ----
}
static void
! _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te)
{
+ RestoreOptions *ropt = AH->public.ropt;
+
/* This hack is only needed in a data-only restore */
if (!ropt->dataOnly || !ropt->disable_triggers)
return;
*************** _disableTriggersIfNecessary(ArchiveHandl
*** 926,933 ****
}
static void
! _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
/* This hack is only needed in a data-only restore */
if (!ropt->dataOnly || !ropt->disable_triggers)
return;
--- 938,947 ----
}
static void
! _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te)
{
+ RestoreOptions *ropt = AH->public.ropt;
+
/* This hack is only needed in a data-only restore */
if (!ropt->dataOnly || !ropt->disable_triggers)
return;
*************** ArchiveEntry(Archive *AHX,
*** 1040,1048 ****
/* Public */
void
! PrintTOCSummary(Archive *AHX, RestoreOptions *ropt)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
TocEntry *te;
teSection curSection;
OutputContext sav;
--- 1054,1063 ----
/* Public */
void
! PrintTOCSummary(Archive *AHX)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
+ RestoreOptions *ropt = AH->public.ropt;
TocEntry *te;
teSection curSection;
OutputContext sav;
*************** EndBlob(Archive *AHX, Oid oid)
*** 1159,1165 ****
void
StartRestoreBlobs(ArchiveHandle *AH)
{
! if (!AH->ropt->single_txn)
{
if (AH->connection)
StartTransaction(&AH->public);
--- 1174,1182 ----
void
StartRestoreBlobs(ArchiveHandle *AH)
{
! RestoreOptions *ropt = AH->public.ropt;
!
! if (!ropt->single_txn)
{
if (AH->connection)
StartTransaction(&AH->public);
*************** StartRestoreBlobs(ArchiveHandle *AH)
*** 1176,1182 ****
void
EndRestoreBlobs(ArchiveHandle *AH)
{
! if (!AH->ropt->single_txn)
{
if (AH->connection)
CommitTransaction(&AH->public);
--- 1193,1201 ----
void
EndRestoreBlobs(ArchiveHandle *AH)
{
! RestoreOptions *ropt = AH->public.ropt;
!
! if (!ropt->single_txn)
{
if (AH->connection)
CommitTransaction(&AH->public);
*************** EndRestoreBlob(ArchiveHandle *AH, Oid oi
*** 1265,1273 ****
***********/
void
! SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
FILE *fh;
char buf[100];
bool incomplete_line;
--- 1284,1293 ----
***********/
void
! SortTocFromFile(Archive *AHX)
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
+ RestoreOptions *ropt = AH->public.ropt;
FILE *fh;
char buf[100];
bool incomplete_line;
*************** ahlog(ArchiveHandle *AH, int level, cons
*** 1550,1556 ****
static int
RestoringToDB(ArchiveHandle *AH)
{
! return (AH->ropt && AH->ropt->useDB && AH->connection);
}
/*
--- 1570,1578 ----
static int
RestoringToDB(ArchiveHandle *AH)
{
! RestoreOptions *ropt = AH->public.ropt;
!
! return (ropt && ropt->useDB && AH->connection);
}
/*
*************** _allocAH(const char *FileSpec, const Arc
*** 2303,2309 ****
}
void
! WriteDataChunks(ArchiveHandle *AH, DumpOptions *dopt, ParallelState *pstate)
{
TocEntry *te;
--- 2325,2331 ----
}
void
! WriteDataChunks(ArchiveHandle *AH, ParallelState *pstate)
{
TocEntry *te;
*************** WriteDataChunks(ArchiveHandle *AH, DumpO
*** 2326,2338 ****
DispatchJobForTocEntry(AH, pstate, te, ACT_DUMP);
}
else
! WriteDataChunksForTocEntry(AH, dopt, te);
}
EnsureWorkersFinished(AH, pstate);
}
void
! WriteDataChunksForTocEntry(ArchiveHandle *AH, DumpOptions *dopt, TocEntry *te)
{
StartDataPtr startPtr;
EndDataPtr endPtr;
--- 2348,2360 ----
DispatchJobForTocEntry(AH, pstate, te, ACT_DUMP);
}
else
! WriteDataChunksForTocEntry(AH, te);
}
EnsureWorkersFinished(AH, pstate);
}
void
! WriteDataChunksForTocEntry(ArchiveHandle *AH, TocEntry *te)
{
StartDataPtr startPtr;
EndDataPtr endPtr;
*************** WriteDataChunksForTocEntry(ArchiveHandle
*** 2356,2362 ****
/*
* The user-provided DataDumper routine needs to call AH->WriteData
*/
! (*te->dataDumper) ((Archive *) AH, dopt, te->dataDumperArg);
if (endPtr != NULL)
(*endPtr) (AH, te);
--- 2378,2384 ----
/*
* The user-provided DataDumper routine needs to call AH->WriteData
*/
! (*te->dataDumper) ((Archive *) AH, te->dataDumperArg);
if (endPtr != NULL)
(*endPtr) (AH, te);
*************** _tocEntryIsACL(TocEntry *te)
*** 2827,2832 ****
--- 2849,2856 ----
static void
_doSetFixedOutputState(ArchiveHandle *AH)
{
+ RestoreOptions *ropt = AH->public.ropt;
+
/* Disable statement_timeout since restore is probably slow */
ahprintf(AH, "SET statement_timeout = 0;\n");
*************** _doSetFixedOutputState(ArchiveHandle *AH
*** 2842,2849 ****
AH->public.std_strings ? "on" : "off");
/* Select the role to be used during restore */
! if (AH->ropt && AH->ropt->use_role)
! ahprintf(AH, "SET ROLE %s;\n", fmtId(AH->ropt->use_role));
/* Make sure function checking is disabled */
ahprintf(AH, "SET check_function_bodies = false;\n");
--- 2866,2873 ----
AH->public.std_strings ? "on" : "off");
/* Select the role to be used during restore */
! if (ropt && ropt->use_role)
! ahprintf(AH, "SET ROLE %s;\n", fmtId(ropt->use_role));
/* Make sure function checking is disabled */
ahprintf(AH, "SET check_function_bodies = false;\n");
*************** _doSetFixedOutputState(ArchiveHandle *AH
*** 2854,2860 ****
ahprintf(AH, "SET escape_string_warning = off;\n");
/* Adjust row-security state */
! if (AH->ropt && AH->ropt->enable_row_security)
ahprintf(AH, "SET row_security = on;\n");
else
ahprintf(AH, "SET row_security = off;\n");
--- 2878,2884 ----
ahprintf(AH, "SET escape_string_warning = off;\n");
/* Adjust row-security state */
! if (ropt && ropt->enable_row_security)
ahprintf(AH, "SET row_security = on;\n");
else
ahprintf(AH, "SET row_security = off;\n");
*************** _becomeUser(ArchiveHandle *AH, const cha
*** 3012,3018 ****
static void
_becomeOwner(ArchiveHandle *AH, TocEntry *te)
{
! if (AH->ropt && (AH->ropt->noOwner || !AH->ropt->use_setsessauth))
return;
_becomeUser(AH, te->owner);
--- 3036,3044 ----
static void
_becomeOwner(ArchiveHandle *AH, TocEntry *te)
{
! RestoreOptions *ropt = AH->public.ropt;
!
! if (ropt && (ropt->noOwner || !ropt->use_setsessauth))
return;
_becomeUser(AH, te->owner);
*************** _selectOutputSchema(ArchiveHandle *AH, c
*** 3083,3094 ****
static void
_selectTablespace(ArchiveHandle *AH, const char *tablespace)
{
PQExpBuffer qry;
const char *want,
*have;
/* do nothing in --no-tablespaces mode */
! if (AH->ropt->noTablespace)
return;
have = AH->currTablespace;
--- 3109,3121 ----
static void
_selectTablespace(ArchiveHandle *AH, const char *tablespace)
{
+ RestoreOptions *ropt = AH->public.ropt;
PQExpBuffer qry;
const char *want,
*have;
/* do nothing in --no-tablespaces mode */
! if (ropt->noTablespace)
return;
have = AH->currTablespace;
*************** _getObjectDescription(PQExpBuffer buf, T
*** 3214,3221 ****
}
static void
! _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isData, bool acl_pass)
{
/* ACLs are dumped only during acl pass */
if (acl_pass)
{
--- 3241,3250 ----
}
static void
! _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData, bool acl_pass)
{
+ RestoreOptions *ropt = AH->public.ropt;
+
/* ACLs are dumped only during acl pass */
if (acl_pass)
{
*************** dumpTimestamp(ArchiveHandle *AH, const c
*** 3624,3630 ****
static void
restore_toc_entries_prefork(ArchiveHandle *AH)
{
- RestoreOptions *ropt = AH->ropt;
bool skipped_some;
TocEntry *next_work_item;
--- 3653,3658 ----
*************** restore_toc_entries_prefork(ArchiveHandl
*** 3676,3682 ****
next_work_item->dumpId,
next_work_item->desc, next_work_item->tag);
! (void) restore_toc_entry(AH, next_work_item, ropt, false);
/* there should be no touch of ready_list here, so pass NULL */
reduce_dependencies(AH, next_work_item, NULL);
--- 3704,3710 ----
next_work_item->dumpId,
next_work_item->desc, next_work_item->tag);
! (void) restore_toc_entry(AH, next_work_item, false);
/* there should be no touch of ready_list here, so pass NULL */
reduce_dependencies(AH, next_work_item, NULL);
*************** restore_toc_entries_parallel(ArchiveHand
*** 3857,3863 ****
static void
restore_toc_entries_postfork(ArchiveHandle *AH, TocEntry *pending_list)
{
! RestoreOptions *ropt = AH->ropt;
TocEntry *te;
ahlog(AH, 2, "entering restore_toc_entries_postfork\n");
--- 3885,3891 ----
static void
restore_toc_entries_postfork(ArchiveHandle *AH, TocEntry *pending_list)
{
! RestoreOptions *ropt = AH->public.ropt;
TocEntry *te;
ahlog(AH, 2, "entering restore_toc_entries_postfork\n");
*************** restore_toc_entries_postfork(ArchiveHand
*** 3880,3886 ****
{
ahlog(AH, 1, "processing missed item %d %s %s\n",
te->dumpId, te->desc, te->tag);
! (void) restore_toc_entry(AH, te, ropt, false);
}
/* The ACLs will be handled back in RestoreArchive. */
--- 3908,3914 ----
{
ahlog(AH, 1, "processing missed item %d %s %s\n",
te->dumpId, te->desc, te->tag);
! (void) restore_toc_entry(AH, te, false);
}
/* The ACLs will be handled back in RestoreArchive. */
*************** parallel_restore(ParallelArgs *args)
*** 4045,4051 ****
{
ArchiveHandle *AH = args->AH;
TocEntry *te = args->te;
- RestoreOptions *ropt = AH->ropt;
int status;
_doSetFixedOutputState(AH);
--- 4073,4078 ----
*************** parallel_restore(ParallelArgs *args)
*** 4055,4061 ****
AH->public.n_errors = 0;
/* Restore the TOC item */
! status = restore_toc_entry(AH, te, ropt, true);
return status;
}
--- 4082,4088 ----
AH->public.n_errors = 0;
/* Restore the TOC item */
! status = restore_toc_entry(AH, te, true);
return status;
}
*************** CloneArchive(ArchiveHandle *AH)
*** 4417,4423 ****
*/
if (AH->mode == archModeRead)
{
! RestoreOptions *ropt = AH->ropt;
Assert(AH->connection == NULL);
/* this also sets clone->connection */
--- 4444,4450 ----
*/
if (AH->mode == archModeRead)
{
! RestoreOptions *ropt = AH->public.ropt;
Assert(AH->connection == NULL);
/* this also sets clone->connection */
diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index 620ada5..4aa7190 100644
*** a/src/bin/pg_dump/pg_backup_archiver.h
--- b/src/bin/pg_dump/pg_backup_archiver.h
*************** typedef enum T_Action
*** 136,142 ****
ACT_RESTORE
} T_Action;
! typedef void (*ClosePtr) (ArchiveHandle *AH, DumpOptions *dopt);
typedef void (*ReopenPtr) (ArchiveHandle *AH);
typedef void (*ArchiveEntryPtr) (ArchiveHandle *AH, TocEntry *te);
--- 136,142 ----
ACT_RESTORE
} T_Action;
! typedef void (*ClosePtr) (ArchiveHandle *AH);
typedef void (*ReopenPtr) (ArchiveHandle *AH);
typedef void (*ArchiveEntryPtr) (ArchiveHandle *AH, TocEntry *te);
*************** typedef void (*SaveArchivePtr) (ArchiveH
*** 157,169 ****
typedef void (*WriteExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
typedef void (*ReadExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
typedef void (*PrintExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
! typedef void (*PrintTocDataPtr) (ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
typedef void (*ClonePtr) (ArchiveHandle *AH);
typedef void (*DeClonePtr) (ArchiveHandle *AH);
typedef char *(*WorkerJobRestorePtr) (ArchiveHandle *AH, TocEntry *te);
! typedef char *(*WorkerJobDumpPtr) (ArchiveHandle *AH, DumpOptions *dopt, TocEntry *te);
typedef char *(*MasterStartParallelItemPtr) (ArchiveHandle *AH, TocEntry *te,
T_Action act);
typedef int (*MasterEndParallelItemPtr) (ArchiveHandle *AH, TocEntry *te,
--- 157,169 ----
typedef void (*WriteExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
typedef void (*ReadExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
typedef void (*PrintExtraTocPtr) (ArchiveHandle *AH, TocEntry *te);
! typedef void (*PrintTocDataPtr) (ArchiveHandle *AH, TocEntry *te);
typedef void (*ClonePtr) (ArchiveHandle *AH);
typedef void (*DeClonePtr) (ArchiveHandle *AH);
typedef char *(*WorkerJobRestorePtr) (ArchiveHandle *AH, TocEntry *te);
! typedef char *(*WorkerJobDumpPtr) (ArchiveHandle *AH, TocEntry *te);
typedef char *(*MasterStartParallelItemPtr) (ArchiveHandle *AH, TocEntry *te,
T_Action act);
typedef int (*MasterEndParallelItemPtr) (ArchiveHandle *AH, TocEntry *te,
*************** struct _archiveHandle
*** 315,323 ****
ArchiveMode mode; /* File mode - r or w */
void *formatData; /* Header data specific to file format */
- RestoreOptions *ropt; /* Used to check restore options in ahwrite
- * etc */
-
/* these vars track state to avoid sending redundant SET commands */
char *currUser; /* current username, or NULL if unknown */
char *currSchema; /* current schema, or NULL */
--- 315,320 ----
*************** extern void WriteHead(ArchiveHandle *AH)
*** 386,393 ****
extern void ReadHead(ArchiveHandle *AH);
extern void WriteToc(ArchiveHandle *AH);
extern void ReadToc(ArchiveHandle *AH);
! extern void WriteDataChunks(ArchiveHandle *AH, DumpOptions *dopt, struct ParallelState *pstate);
! extern void WriteDataChunksForTocEntry(ArchiveHandle *AH, DumpOptions *dopt, TocEntry *te);
extern ArchiveHandle *CloneArchive(ArchiveHandle *AH);
extern void DeCloneArchive(ArchiveHandle *AH);
--- 383,390 ----
extern void ReadHead(ArchiveHandle *AH);
extern void WriteToc(ArchiveHandle *AH);
extern void ReadToc(ArchiveHandle *AH);
! extern void WriteDataChunks(ArchiveHandle *AH, struct ParallelState *pstate);
! extern void WriteDataChunksForTocEntry(ArchiveHandle *AH, TocEntry *te);
extern ArchiveHandle *CloneArchive(ArchiveHandle *AH);
extern void DeCloneArchive(ArchiveHandle *AH);
diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c
index ee05380..be6dbca 100644
*** a/src/bin/pg_dump/pg_backup_custom.c
--- b/src/bin/pg_dump/pg_backup_custom.c
*************** static int _WriteByte(ArchiveHandle *AH,
*** 42,50 ****
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt);
static void _ReopenArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _PrintExtraToc(ArchiveHandle *AH, TocEntry *te);
--- 42,50 ----
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH);
static void _ReopenArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _PrintExtraToc(ArchiveHandle *AH, TocEntry *te);
*************** _EndBlobs(ArchiveHandle *AH, TocEntry *t
*** 419,425 ****
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
lclContext *ctx = (lclContext *) AH->formatData;
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
--- 419,425 ----
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te)
{
lclContext *ctx = (lclContext *) AH->formatData;
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
*************** _PrintTocData(ArchiveHandle *AH, TocEntr
*** 500,506 ****
break;
case BLK_BLOBS:
! _LoadBlobs(AH, ropt->dropSchema);
break;
default: /* Always have a default */
--- 500,506 ----
break;
case BLK_BLOBS:
! _LoadBlobs(AH, AH->public.ropt->dropSchema);
break;
default: /* Always have a default */
*************** _ReadBuf(ArchiveHandle *AH, void *buf, s
*** 695,701 ****
*
*/
static void
! _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt)
{
lclContext *ctx = (lclContext *) AH->formatData;
pgoff_t tpos;
--- 695,701 ----
*
*/
static void
! _CloseArchive(ArchiveHandle *AH)
{
lclContext *ctx = (lclContext *) AH->formatData;
pgoff_t tpos;
*************** _CloseArchive(ArchiveHandle *AH, DumpOpt
*** 710,716 ****
strerror(errno));
WriteToc(AH);
ctx->dataStart = _getFilePos(AH, ctx);
! WriteDataChunks(AH, dopt, NULL);
/*
* If possible, re-write the TOC in order to update the data offset
--- 710,716 ----
strerror(errno));
WriteToc(AH);
ctx->dataStart = _getFilePos(AH, ctx);
! WriteDataChunks(AH, NULL);
/*
* If possible, re-write the TOC in order to update the data offset
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index 4ebdf04..727a7fe 100644
*** a/src/bin/pg_dump/pg_backup_directory.c
--- b/src/bin/pg_dump/pg_backup_directory.c
*************** static int _WriteByte(ArchiveHandle *AH,
*** 72,80 ****
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt);
static void _ReopenArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
--- 72,80 ----
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH);
static void _ReopenArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
*************** static void _StartBlobs(ArchiveHandle *A
*** 84,90 ****
static void _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlobs(ArchiveHandle *AH, TocEntry *te);
! static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt);
static void _Clone(ArchiveHandle *AH);
static void _DeClone(ArchiveHandle *AH);
--- 84,90 ----
static void _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlobs(ArchiveHandle *AH, TocEntry *te);
! static void _LoadBlobs(ArchiveHandle *AH);
static void _Clone(ArchiveHandle *AH);
static void _DeClone(ArchiveHandle *AH);
*************** static char *_MasterStartParallelItem(Ar
*** 93,99 ****
static int _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te,
const char *str, T_Action act);
static char *_WorkerJobRestoreDirectory(ArchiveHandle *AH, TocEntry *te);
! static char *_WorkerJobDumpDirectory(ArchiveHandle *AH, DumpOptions *dopt, TocEntry *te);
static void setFilePath(ArchiveHandle *AH, char *buf,
const char *relativeFilename);
--- 93,99 ----
static int _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te,
const char *str, T_Action act);
static char *_WorkerJobRestoreDirectory(ArchiveHandle *AH, TocEntry *te);
! static char *_WorkerJobDumpDirectory(ArchiveHandle *AH, TocEntry *te);
static void setFilePath(ArchiveHandle *AH, char *buf,
const char *relativeFilename);
*************** _EndData(ArchiveHandle *AH, TocEntry *te
*** 386,392 ****
* Print data for a given file (can be a BLOB as well)
*/
static void
! _PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
{
size_t cnt;
char *buf;
--- 386,392 ----
* Print data for a given file (can be a BLOB as well)
*/
static void
! _PrintFileData(ArchiveHandle *AH, char *filename)
{
size_t cnt;
char *buf;
*************** _PrintFileData(ArchiveHandle *AH, char *
*** 418,424 ****
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
--- 418,424 ----
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te)
{
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
*************** _PrintTocData(ArchiveHandle *AH, TocEntr
*** 426,443 ****
return;
if (strcmp(te->desc, "BLOBS") == 0)
! _LoadBlobs(AH, ropt);
else
{
char fname[MAXPGPATH];
setFilePath(AH, fname, tctx->filename);
! _PrintFileData(AH, fname, ropt);
}
}
static void
! _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
{
Oid oid;
lclContext *ctx = (lclContext *) AH->formatData;
--- 426,443 ----
return;
if (strcmp(te->desc, "BLOBS") == 0)
! _LoadBlobs(AH);
else
{
char fname[MAXPGPATH];
setFilePath(AH, fname, tctx->filename);
! _PrintFileData(AH, fname);
}
}
static void
! _LoadBlobs(ArchiveHandle *AH)
{
Oid oid;
lclContext *ctx = (lclContext *) AH->formatData;
*************** _LoadBlobs(ArchiveHandle *AH, RestoreOpt
*** 465,473 ****
exit_horribly(modulename, "invalid line in large object TOC file \"%s\": \"%s\"\n",
fname, line);
! StartRestoreBlob(AH, oid, ropt->dropSchema);
snprintf(path, MAXPGPATH, "%s/%s", ctx->directory, fname);
! _PrintFileData(AH, path, ropt);
EndRestoreBlob(AH, oid);
}
if (!cfeof(ctx->blobsTocFH))
--- 465,473 ----
exit_horribly(modulename, "invalid line in large object TOC file \"%s\": \"%s\"\n",
fname, line);
! StartRestoreBlob(AH, oid, AH->public.ropt->dropSchema);
snprintf(path, MAXPGPATH, "%s/%s", ctx->directory, fname);
! _PrintFileData(AH, path);
EndRestoreBlob(AH, oid);
}
if (!cfeof(ctx->blobsTocFH))
*************** _ReadBuf(ArchiveHandle *AH, void *buf, s
*** 567,573 ****
* WriteDataChunks to save all DATA & BLOBs.
*/
static void
! _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt)
{
lclContext *ctx = (lclContext *) AH->formatData;
--- 567,573 ----
* WriteDataChunks to save all DATA & BLOBs.
*/
static void
! _CloseArchive(ArchiveHandle *AH)
{
lclContext *ctx = (lclContext *) AH->formatData;
*************** _CloseArchive(ArchiveHandle *AH, DumpOpt
*** 579,585 ****
setFilePath(AH, fname, "toc.dat");
/* this will actually fork the processes for a parallel backup */
! ctx->pstate = ParallelBackupStart(AH, dopt, NULL);
/* The TOC is always created uncompressed */
tocFH = cfopen_write(fname, PG_BINARY_W, 0);
--- 579,585 ----
setFilePath(AH, fname, "toc.dat");
/* this will actually fork the processes for a parallel backup */
! ctx->pstate = ParallelBackupStart(AH);
/* The TOC is always created uncompressed */
tocFH = cfopen_write(fname, PG_BINARY_W, 0);
*************** _CloseArchive(ArchiveHandle *AH, DumpOpt
*** 600,606 ****
if (cfclose(tocFH) != 0)
exit_horribly(modulename, "could not close TOC file: %s\n",
strerror(errno));
! WriteDataChunks(AH, dopt, ctx->pstate);
ParallelBackupEnd(AH, ctx->pstate);
}
--- 600,606 ----
if (cfclose(tocFH) != 0)
exit_horribly(modulename, "could not close TOC file: %s\n",
strerror(errno));
! WriteDataChunks(AH, ctx->pstate);
ParallelBackupEnd(AH, ctx->pstate);
}
*************** _MasterStartParallelItem(ArchiveHandle *
*** 791,797 ****
* function of the respective dump format.
*/
static char *
! _WorkerJobDumpDirectory(ArchiveHandle *AH, DumpOptions *dopt, TocEntry *te)
{
/*
* short fixed-size string + some ID so far, this needs to be malloc'ed
--- 791,797 ----
* function of the respective dump format.
*/
static char *
! _WorkerJobDumpDirectory(ArchiveHandle *AH, TocEntry *te)
{
/*
* short fixed-size string + some ID so far, this needs to be malloc'ed
*************** _WorkerJobDumpDirectory(ArchiveHandle *A
*** 810,816 ****
* succeed... A failure will be detected by the parent when the child dies
* unexpectedly.
*/
! WriteDataChunksForTocEntry(AH, dopt, te);
snprintf(buf, buflen, "OK DUMP %d", te->dumpId);
--- 810,816 ----
* succeed... A failure will be detected by the parent when the child dies
* unexpectedly.
*/
! WriteDataChunksForTocEntry(AH, te);
snprintf(buf, buflen, "OK DUMP %d", te->dumpId);
diff --git a/src/bin/pg_dump/pg_backup_null.c b/src/bin/pg_dump/pg_backup_null.c
index 77cf3fd..848eed4 100644
*** a/src/bin/pg_dump/pg_backup_null.c
--- b/src/bin/pg_dump/pg_backup_null.c
*************** static void _WriteBlobData(ArchiveHandle
*** 33,40 ****
static void _EndData(ArchiveHandle *AH, TocEntry *te);
static int _WriteByte(ArchiveHandle *AH, const int i);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
static void _StartBlobs(ArchiveHandle *AH, TocEntry *te);
static void _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
--- 33,40 ----
static void _EndData(ArchiveHandle *AH, TocEntry *te);
static int _WriteByte(ArchiveHandle *AH, const int i);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
static void _StartBlobs(ArchiveHandle *AH, TocEntry *te);
static void _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
static void _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid);
*************** _StartBlob(ArchiveHandle *AH, TocEntry *
*** 149,155 ****
exit_horribly(NULL, "invalid OID for large object\n");
/* With an old archive we must do drop and create logic here */
! if (old_blob_style && AH->ropt->dropSchema)
DropBlobIfExists(AH, oid);
if (old_blob_style)
--- 149,155 ----
exit_horribly(NULL, "invalid OID for large object\n");
/* With an old archive we must do drop and create logic here */
! if (old_blob_style && AH->public.ropt->dropSchema)
DropBlobIfExists(AH, oid);
if (old_blob_style)
*************** _EndBlobs(ArchiveHandle *AH, TocEntry *t
*** 192,211 ****
*------
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
if (te->dataDumper)
{
- DumpOptions *dopt;
-
AH->currToc = te;
if (strcmp(te->desc, "BLOBS") == 0)
_StartBlobs(AH, te);
! dopt = dumpOptionsFromRestoreOptions(ropt);
! (*te->dataDumper) ((Archive *) AH, dopt, te->dataDumperArg);
! pg_free(dopt);
if (strcmp(te->desc, "BLOBS") == 0)
_EndBlobs(AH, te);
--- 192,207 ----
*------
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te)
{
if (te->dataDumper)
{
AH->currToc = te;
if (strcmp(te->desc, "BLOBS") == 0)
_StartBlobs(AH, te);
! (*te->dataDumper) ((Archive *) AH, te->dataDumperArg);
if (strcmp(te->desc, "BLOBS") == 0)
_EndBlobs(AH, te);
*************** _WriteBuf(ArchiveHandle *AH, const void
*** 229,235 ****
}
static void
! _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt)
{
/* Nothing to do */
}
--- 225,231 ----
}
static void
! _CloseArchive(ArchiveHandle *AH)
{
/* Nothing to do */
}
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index c40dfe5..eb5bcbb 100644
*** a/src/bin/pg_dump/pg_backup_tar.c
--- b/src/bin/pg_dump/pg_backup_tar.c
*************** static int _WriteByte(ArchiveHandle *AH,
*** 47,54 ****
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _PrintExtraToc(ArchiveHandle *AH, TocEntry *te);
--- 47,54 ----
static int _ReadByte(ArchiveHandle *);
static void _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len);
static void _ReadBuf(ArchiveHandle *AH, void *buf, size_t len);
! static void _CloseArchive(ArchiveHandle *AH);
! static void _PrintTocData(ArchiveHandle *AH, TocEntry *te);
static void _WriteExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _ReadExtraToc(ArchiveHandle *AH, TocEntry *te);
static void _PrintExtraToc(ArchiveHandle *AH, TocEntry *te);
*************** typedef struct
*** 100,106 ****
/* translator: this is a module name */
static const char *modulename = gettext_noop("tar archiver");
! static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt);
static TAR_MEMBER *tarOpen(ArchiveHandle *AH, const char *filename, char mode);
static void tarClose(ArchiveHandle *AH, TAR_MEMBER *TH);
--- 100,106 ----
/* translator: this is a module name */
static const char *modulename = gettext_noop("tar archiver");
! static void _LoadBlobs(ArchiveHandle *AH);
static TAR_MEMBER *tarOpen(ArchiveHandle *AH, const char *filename, char mode);
static void tarClose(ArchiveHandle *AH, TAR_MEMBER *TH);
*************** _EndData(ArchiveHandle *AH, TocEntry *te
*** 632,638 ****
* Print data for a given file
*/
static void
! _PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
{
lclContext *ctx = (lclContext *) AH->formatData;
char buf[4096];
--- 632,638 ----
* Print data for a given file
*/
static void
! _PrintFileData(ArchiveHandle *AH, char *filename)
{
lclContext *ctx = (lclContext *) AH->formatData;
char buf[4096];
*************** _PrintFileData(ArchiveHandle *AH, char *
*** 659,665 ****
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
{
lclContext *ctx = (lclContext *) AH->formatData;
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
--- 659,665 ----
* Print data for a given TOC entry
*/
static void
! _PrintTocData(ArchiveHandle *AH, TocEntry *te)
{
lclContext *ctx = (lclContext *) AH->formatData;
lclTocEntry *tctx = (lclTocEntry *) te->formatData;
*************** _PrintTocData(ArchiveHandle *AH, TocEntr
*** 708,720 ****
}
if (strcmp(te->desc, "BLOBS") == 0)
! _LoadBlobs(AH, ropt);
else
! _PrintFileData(AH, tctx->filename, ropt);
}
static void
! _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
{
Oid oid;
lclContext *ctx = (lclContext *) AH->formatData;
--- 708,720 ----
}
if (strcmp(te->desc, "BLOBS") == 0)
! _LoadBlobs(AH);
else
! _PrintFileData(AH, tctx->filename);
}
static void
! _LoadBlobs(ArchiveHandle *AH)
{
Oid oid;
lclContext *ctx = (lclContext *) AH->formatData;
*************** _LoadBlobs(ArchiveHandle *AH, RestoreOpt
*** 737,743 ****
{
ahlog(AH, 1, "restoring large object with OID %u\n", oid);
! StartRestoreBlob(AH, oid, ropt->dropSchema);
while ((cnt = tarRead(buf, 4095, th)) > 0)
{
--- 737,743 ----
{
ahlog(AH, 1, "restoring large object with OID %u\n", oid);
! StartRestoreBlob(AH, oid, AH->public.ropt->dropSchema);
while ((cnt = tarRead(buf, 4095, th)) > 0)
{
*************** _ReadBuf(ArchiveHandle *AH, void *buf, s
*** 824,835 ****
}
static void
! _CloseArchive(ArchiveHandle *AH, DumpOptions *dopt)
{
lclContext *ctx = (lclContext *) AH->formatData;
TAR_MEMBER *th;
RestoreOptions *ropt;
RestoreOptions *savRopt;
int savVerbose,
i;
--- 824,836 ----
}
static void
! _CloseArchive(ArchiveHandle *AH)
{
lclContext *ctx = (lclContext *) AH->formatData;
TAR_MEMBER *th;
RestoreOptions *ropt;
RestoreOptions *savRopt;
+ DumpOptions *savDopt;
int savVerbose,
i;
*************** _CloseArchive(ArchiveHandle *AH, DumpOpt
*** 847,853 ****
/*
* Now send the data (tables & blobs)
*/
! WriteDataChunks(AH, dopt, NULL);
/*
* Now this format wants to append a script which does a full restore
--- 848,854 ----
/*
* Now send the data (tables & blobs)
*/
! WriteDataChunks(AH, NULL);
/*
* Now this format wants to append a script which does a full restore
*************** _CloseArchive(ArchiveHandle *AH, DumpOpt
*** 869,890 ****
ctx->scriptTH = th;
ropt = NewRestoreOptions();
! memcpy(ropt, AH->ropt, sizeof(RestoreOptions));
ropt->filename = NULL;
ropt->dropSchema = 1;
ropt->compression = 0;
ropt->superuser = NULL;
ropt->suppressDumpWarnings = true;
! savRopt = AH->ropt;
! AH->ropt = ropt;
savVerbose = AH->public.verbose;
AH->public.verbose = 0;
RestoreArchive((Archive *) AH);
! AH->ropt = savRopt;
AH->public.verbose = savVerbose;
tarClose(AH, th);
--- 870,894 ----
ctx->scriptTH = th;
ropt = NewRestoreOptions();
! memcpy(ropt, AH->public.ropt, sizeof(RestoreOptions));
ropt->filename = NULL;
ropt->dropSchema = 1;
ropt->compression = 0;
ropt->superuser = NULL;
ropt->suppressDumpWarnings = true;
! savDopt = AH->public.dopt;
! savRopt = AH->public.ropt;
!
! SetArchiveOptions((Archive *) AH, NULL, ropt);
savVerbose = AH->public.verbose;
AH->public.verbose = 0;
RestoreArchive((Archive *) AH);
! SetArchiveOptions((Archive *) AH, savDopt, savRopt);
!
AH->public.verbose = savVerbose;
tarClose(AH, th);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 56c0528..d68d782 100644
*** a/src/bin/pg_dump/pg_dump.c
--- b/src/bin/pg_dump/pg_dump.c
*************** char g_comment_end[10];
*** 128,134 ****
static const CatalogId nilCatalogId = {0, 0};
static void help(const char *progname);
! static void setup_connection(Archive *AH, DumpOptions *dopt,
const char *dumpencoding, const char *dumpsnapshot,
char *use_role);
static ArchiveFormat parseArchiveFormat(const char *format, ArchiveMode *mode);
--- 128,134 ----
static const CatalogId nilCatalogId = {0, 0};
static void help(const char *progname);
! static void setup_connection(Archive *AH,
const char *dumpencoding, const char *dumpsnapshot,
char *use_role);
static ArchiveFormat parseArchiveFormat(const char *format, ArchiveMode *mode);
*************** static void expand_table_name_patterns(A
*** 141,206 ****
SimpleOidList *oids,
bool strict_names);
static NamespaceInfo *findNamespace(Archive *fout, Oid nsoid, Oid objoid);
! 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, 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, 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, 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 dumpUndefinedType(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, 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 dumpTransform(Archive *fout, DumpOptions *dopt, TransformInfo *transform);
! 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, 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, DumpOptions *dopt, DefaultACLInfo *daclinfo);
! 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);
--- 141,206 ----
SimpleOidList *oids,
bool strict_names);
static NamespaceInfo *findNamespace(Archive *fout, Oid nsoid, Oid objoid);
! static void dumpTableData(Archive *fout, TableDataInfo *tdinfo);
static void refreshMatViewData(Archive *fout, TableDataInfo *tdinfo);
static void guessConstraintInheritance(TableInfo *tblinfo, int numTables);
! static void dumpComment(Archive *fout, 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,
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 dumpUndefinedType(Archive *fout, TypeInfo *tyinfo);
! static void dumpDomain(Archive *fout, TypeInfo *tyinfo);
! static void dumpCompositeType(Archive *fout, 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 dumpTransform(Archive *fout, TransformInfo *transform);
! 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 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 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 dumpACL(Archive *fout, 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);
*************** static void selectSourceSchema(Archive *
*** 238,247 ****
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, DumpOptions *dopt, BlobInfo *binfo);
! static int dumpBlobs(Archive *fout, DumpOptions *dopt, void *arg);
! static void dumpPolicy(Archive *fout, DumpOptions *dopt, PolicyInfo *polinfo);
! 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,
--- 238,247 ----
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 dumpPolicy(Archive *fout, PolicyInfo *polinfo);
! static void dumpDatabase(Archive *AH);
static void dumpEncoding(Archive *AH);
static void dumpStdStrings(Archive *AH);
static void binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
*************** static void fmtReloptionsArray(Archive *
*** 261,267 ****
const char *reloptions, const char *prefix);
static char *get_synchronized_snapshot(Archive *fout);
static PGresult *ExecuteSqlQueryForSingleRow(Archive *fout, char *query);
! static void setupDumpWorker(Archive *AHX, DumpOptions *dopt, RestoreOptions *ropt);
int
--- 261,267 ----
const char *reloptions, const char *prefix);
static char *get_synchronized_snapshot(Archive *fout);
static PGresult *ExecuteSqlQueryForSingleRow(Archive *fout, char *query);
! static void setupDumpWorker(Archive *AHX);
int
*************** main(int argc, char **argv)
*** 611,616 ****
--- 611,619 ----
fout = CreateArchive(filename, archiveFormat, compressLevel, archiveMode,
setupDumpWorker);
+ /* Make dump options accessible right away */
+ SetArchiveOptions(fout, &dopt, NULL);
+
/* Register the cleanup hook */
on_exit_close_archive(fout);
*************** main(int argc, char **argv)
*** 634,640 ****
* death.
*/
ConnectDatabase(fout, dopt.dbname, dopt.pghost, dopt.pgport, dopt.username, prompt_password);
! setup_connection(fout, &dopt, dumpencoding, dumpsnapshot, use_role);
/*
* Disable security label support if server version < v9.1.x (prevents
--- 637,643 ----
* death.
*/
ConnectDatabase(fout, dopt.dbname, dopt.pghost, dopt.pgport, dopt.username, prompt_password);
! setup_connection(fout, dumpencoding, dumpsnapshot, use_role);
/*
* Disable security label support if server version < v9.1.x (prevents
*************** main(int argc, char **argv)
*** 739,745 ****
* Now scan the database and create DumpableObject structs for all the
* objects we intend to dump.
*/
! tblinfo = getSchemaData(fout, &dopt, &numTables);
if (fout->remoteVersion < 80400)
guessConstraintInheritance(tblinfo, numTables);
--- 742,748 ----
* Now scan the database and create DumpableObject structs for all the
* objects we intend to dump.
*/
! tblinfo = getSchemaData(fout, &numTables);
if (fout->remoteVersion < 80400)
guessConstraintInheritance(tblinfo, numTables);
*************** main(int argc, char **argv)
*** 803,813 ****
/* The database item is always next, unless we don't want it at all */
if (dopt.include_everything && !dopt.dataOnly)
! dumpDatabase(fout, &dopt);
/* Now the rearrangeable objects. */
for (i = 0; i < numObjs; i++)
! dumpDumpableObject(fout, &dopt, dobjs[i]);
/*
* Set up options info to ensure we dump what we want.
--- 806,816 ----
/* The database item is always next, unless we don't want it at all */
if (dopt.include_everything && !dopt.dataOnly)
! dumpDatabase(fout);
/* Now the rearrangeable objects. */
for (i = 0; i < numObjs; i++)
! dumpDumpableObject(fout, dobjs[i]);
/*
* Set up options info to ensure we dump what we want.
*************** main(int argc, char **argv)
*** 843,849 ****
ropt->suppressDumpWarnings = true; /* We've already shown them */
! SetArchiveRestoreOptions(fout, ropt);
/*
* The archive's TOC entries are now marked as to which ones will actually
--- 846,855 ----
ropt->suppressDumpWarnings = true; /* We've already shown them */
! SetArchiveOptions(fout, &dopt, ropt);
!
! /* Mark which entries should be output */
! ProcessArchiveRestoreOptions(fout);
/*
* The archive's TOC entries are now marked as to which ones will actually
*************** main(int argc, char **argv)
*** 863,869 ****
if (plainText)
RestoreArchive(fout);
! CloseArchive(fout, &dopt);
exit_nicely(0);
}
--- 869,875 ----
if (plainText)
RestoreArchive(fout);
! CloseArchive(fout);
exit_nicely(0);
}
*************** help(const char *progname)
*** 941,949 ****
}
static void
! setup_connection(Archive *AH, DumpOptions *dopt, const char *dumpencoding,
const char *dumpsnapshot, char *use_role)
{
PGconn *conn = GetConnection(AH);
const char *std_strings;
--- 947,956 ----
}
static void
! setup_connection(Archive *AH, const char *dumpencoding,
const char *dumpsnapshot, char *use_role)
{
+ DumpOptions *dopt = AH->dopt;
PGconn *conn = GetConnection(AH);
const char *std_strings;
*************** setup_connection(Archive *AH, DumpOption
*** 1092,1100 ****
}
static void
! setupDumpWorker(Archive *AHX, DumpOptions *dopt, RestoreOptions *ropt)
{
! setup_connection(AHX, dopt, NULL, NULL, NULL);
}
static char *
--- 1099,1107 ----
}
static void
! setupDumpWorker(Archive *AHX)
{
! setup_connection(AHX, NULL, NULL, NULL);
}
static char *
*************** selectDumpableObject(DumpableObject *dob
*** 1437,1443 ****
*/
static int
! dumpTableData_copy(Archive *fout, DumpOptions *dopt, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
--- 1444,1450 ----
*/
static int
! dumpTableData_copy(Archive *fout, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
*************** dumpTableData_copy(Archive *fout, DumpOp
*** 1612,1622 ****
* E'' strings, or dollar-quoted strings. So don't emit anything like that.
*/
static int
! dumpTableData_insert(Archive *fout, DumpOptions *dopt, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
const char *classname = tbinfo->dobj.name;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer insertStmt = NULL;
PGresult *res;
--- 1619,1630 ----
* E'' strings, or dollar-quoted strings. So don't emit anything like that.
*/
static int
! dumpTableData_insert(Archive *fout, void *dcontext)
{
TableDataInfo *tdinfo = (TableDataInfo *) dcontext;
TableInfo *tbinfo = tdinfo->tdtable;
const char *classname = tbinfo->dobj.name;
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer insertStmt = NULL;
PGresult *res;
*************** dumpTableData_insert(Archive *fout, Dump
*** 1798,1805 ****
* Actually, this just makes an ArchiveEntry for the table contents.
*/
static void
! dumpTableData(Archive *fout, DumpOptions *dopt, TableDataInfo *tdinfo)
{
TableInfo *tbinfo = tdinfo->tdtable;
PQExpBuffer copyBuf = createPQExpBuffer();
PQExpBuffer clistBuf = createPQExpBuffer();
--- 1806,1814 ----
* Actually, this just makes an ArchiveEntry for the table contents.
*/
static void
! dumpTableData(Archive *fout, TableDataInfo *tdinfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = tdinfo->tdtable;
PQExpBuffer copyBuf = createPQExpBuffer();
PQExpBuffer clistBuf = createPQExpBuffer();
*************** guessConstraintInheritance(TableInfo *tb
*** 2201,2208 ****
* dump the database definition
*/
static void
! dumpDatabase(Archive *fout, DumpOptions *dopt)
{
PQExpBuffer dbQry = createPQExpBuffer();
PQExpBuffer delQry = createPQExpBuffer();
PQExpBuffer creaQry = createPQExpBuffer();
--- 2210,2218 ----
* dump the database definition
*/
static void
! dumpDatabase(Archive *fout)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer dbQry = createPQExpBuffer();
PQExpBuffer delQry = createPQExpBuffer();
PQExpBuffer creaQry = createPQExpBuffer();
*************** dumpDatabase(Archive *fout, DumpOptions
*** 2522,2528 ****
{
resetPQExpBuffer(dbQry);
appendPQExpBuffer(dbQry, "DATABASE %s", fmtId(datname));
! dumpComment(fout, dopt, dbQry->data, NULL, "",
dbCatId, 0, dbDumpId);
}
--- 2532,2538 ----
{
resetPQExpBuffer(dbQry);
appendPQExpBuffer(dbQry, "DATABASE %s", fmtId(datname));
! dumpComment(fout, dbQry->data, NULL, "",
dbCatId, 0, dbDumpId);
}
*************** getBlobs(Archive *fout)
*** 2693,2699 ****
* dump the definition (metadata) of the given large object
*/
static void
! dumpBlob(Archive *fout, DumpOptions *dopt, BlobInfo *binfo)
{
PQExpBuffer cquery = createPQExpBuffer();
PQExpBuffer dquery = createPQExpBuffer();
--- 2703,2709 ----
* dump the definition (metadata) of the given large object
*/
static void
! dumpBlob(Archive *fout, BlobInfo *binfo)
{
PQExpBuffer cquery = createPQExpBuffer();
PQExpBuffer dquery = createPQExpBuffer();
*************** dumpBlob(Archive *fout, DumpOptions *dop
*** 2720,2737 ****
appendPQExpBuffer(cquery, "LARGE OBJECT %s", binfo->dobj.name);
/* Dump comment if any */
! dumpComment(fout, dopt, cquery->data,
NULL, binfo->rolname,
binfo->dobj.catId, 0, binfo->dobj.dumpId);
/* Dump security label if any */
! dumpSecLabel(fout, dopt, cquery->data,
NULL, binfo->rolname,
binfo->dobj.catId, 0, binfo->dobj.dumpId);
/* Dump ACL if any */
if (binfo->blobacl)
! dumpACL(fout, dopt, binfo->dobj.catId, binfo->dobj.dumpId, "LARGE OBJECT",
binfo->dobj.name, NULL, cquery->data,
NULL, binfo->rolname, binfo->blobacl);
--- 2730,2747 ----
appendPQExpBuffer(cquery, "LARGE OBJECT %s", binfo->dobj.name);
/* Dump comment if any */
! dumpComment(fout, cquery->data,
NULL, binfo->rolname,
binfo->dobj.catId, 0, binfo->dobj.dumpId);
/* Dump security label if any */
! dumpSecLabel(fout, 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",
binfo->dobj.name, NULL, cquery->data,
NULL, binfo->rolname, binfo->blobacl);
*************** dumpBlob(Archive *fout, DumpOptions *dop
*** 2744,2750 ****
* dump the data contents of all large objects
*/
static int
! dumpBlobs(Archive *fout, DumpOptions *dopt, void *arg)
{
const char *blobQry;
const char *blobFetchQry;
--- 2754,2760 ----
* dump the data contents of all large objects
*/
static int
! dumpBlobs(Archive *fout, void *arg)
{
const char *blobQry;
const char *blobFetchQry;
*************** getPolicies(Archive *fout, TableInfo tbl
*** 2968,2975 ****
* dump the definition of the given policy
*/
static void
! dumpPolicy(Archive *fout, DumpOptions *dopt, PolicyInfo *polinfo)
{
TableInfo *tbinfo = polinfo->poltable;
PQExpBuffer query;
PQExpBuffer delqry;
--- 2978,2986 ----
* dump the definition of the given policy
*/
static void
! dumpPolicy(Archive *fout, PolicyInfo *polinfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = polinfo->poltable;
PQExpBuffer query;
PQExpBuffer delqry;
*************** findNamespace(Archive *fout, Oid nsoid,
*** 3390,3397 ****
* numExtensions is set to the number of extensions read in
*/
ExtensionInfo *
! getExtensions(Archive *fout, DumpOptions *dopt, int *numExtensions)
{
PGresult *res;
int ntups;
int i;
--- 3401,3409 ----
* numExtensions is set to the number of extensions read in
*/
ExtensionInfo *
! getExtensions(Archive *fout, int *numExtensions)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
int ntups;
int i;
*************** getOpfamilies(Archive *fout, int *numOpf
*** 4205,4212 ****
* numAggs is set to the number of aggregates read in
*/
AggInfo *
! getAggregates(Archive *fout, DumpOptions *dopt, int *numAggs)
{
PGresult *res;
int ntups;
int i;
--- 4217,4225 ----
* numAggs is set to the number of aggregates read in
*/
AggInfo *
! getAggregates(Archive *fout, int *numAggs)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
int ntups;
int i;
*************** getAggregates(Archive *fout, DumpOptions
*** 4362,4369 ****
* numFuncs is set to the number of functions read in
*/
FuncInfo *
! getFuncs(Archive *fout, DumpOptions *dopt, int *numFuncs)
{
PGresult *res;
int ntups;
int i;
--- 4375,4383 ----
* numFuncs is set to the number of functions read in
*/
FuncInfo *
! getFuncs(Archive *fout, int *numFuncs)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
int ntups;
int i;
*************** getFuncs(Archive *fout, DumpOptions *dop
*** 4524,4531 ****
* numTables is set to the number of tables read in
*/
TableInfo *
! getTables(Archive *fout, DumpOptions *dopt, int *numTables)
{
PGresult *res;
int ntups;
int i;
--- 4538,4546 ----
* numTables is set to the number of tables read in
*/
TableInfo *
! getTables(Archive *fout, int *numTables)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
int ntups;
int i;
*************** getProcLangs(Archive *fout, int *numProc
*** 6493,6500 ****
* numCasts is set to the number of casts read in
*/
CastInfo *
! getCasts(Archive *fout, DumpOptions *dopt, int *numCasts)
{
PGresult *res;
int ntups;
int i;
--- 6508,6516 ----
* numCasts is set to the number of casts read in
*/
CastInfo *
! getCasts(Archive *fout, int *numCasts)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
int ntups;
int i;
*************** getTransforms(Archive *fout, int *numTra
*** 6731,6738 ****
* modifies tblinfo
*/
void
! getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tblinfo, int numTables)
{
int i,
j;
PQExpBuffer q = createPQExpBuffer();
--- 6747,6755 ----
* modifies tblinfo
*/
void
! getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
{
+ DumpOptions *dopt = fout->dopt;
int i,
j;
PQExpBuffer q = createPQExpBuffer();
*************** getForeignServers(Archive *fout, int *nu
*** 7847,7854 ****
* numDefaultACLs is set to the number of ACLs read in
*/
DefaultACLInfo *
! getDefaultACLs(Archive *fout, DumpOptions *dopt, int *numDefaultACLs)
{
DefaultACLInfo *daclinfo;
PQExpBuffer query;
PGresult *res;
--- 7864,7872 ----
* numDefaultACLs is set to the number of ACLs read in
*/
DefaultACLInfo *
! getDefaultACLs(Archive *fout, int *numDefaultACLs)
{
+ DumpOptions *dopt = fout->dopt;
DefaultACLInfo *daclinfo;
PQExpBuffer query;
PGresult *res;
*************** getDefaultACLs(Archive *fout, DumpOption
*** 7945,7954 ****
* calling ArchiveEntry() for the specified object.
*/
static void
! dumpComment(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
CommentItem *comments;
int ncomments;
--- 7963,7973 ----
* calling ArchiveEntry() for the specified object.
*/
static void
! dumpComment(Archive *fout, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
+ DumpOptions *dopt = fout->dopt;
CommentItem *comments;
int ncomments;
*************** dumpComment(Archive *fout, DumpOptions *
*** 8009,8017 ****
* and its columns.
*/
static void
! dumpTableComment(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo,
const char *reltypename)
{
CommentItem *comments;
int ncomments;
PQExpBuffer query;
--- 8028,8037 ----
* and its columns.
*/
static void
! dumpTableComment(Archive *fout, TableInfo *tbinfo,
const char *reltypename)
{
+ DumpOptions *dopt = fout->dopt;
CommentItem *comments;
int ncomments;
PQExpBuffer query;
*************** collectComments(Archive *fout, CommentIt
*** 8263,8373 ****
* ArchiveEntries (TOC objects) for each object to be dumped.
*/
static void
! dumpDumpableObject(Archive *fout, DumpOptions *dopt, DumpableObject *dobj)
{
switch (dobj->objType)
{
case DO_NAMESPACE:
! dumpNamespace(fout, dopt, (NamespaceInfo *) dobj);
break;
case DO_EXTENSION:
! dumpExtension(fout, dopt, (ExtensionInfo *) dobj);
break;
case DO_TYPE:
! dumpType(fout, dopt, (TypeInfo *) dobj);
break;
case DO_SHELL_TYPE:
! dumpShellType(fout, dopt, (ShellTypeInfo *) dobj);
break;
case DO_FUNC:
! dumpFunc(fout, dopt, (FuncInfo *) dobj);
break;
case DO_AGG:
! dumpAgg(fout, dopt, (AggInfo *) dobj);
break;
case DO_OPERATOR:
! dumpOpr(fout, dopt, (OprInfo *) dobj);
break;
case DO_OPCLASS:
! dumpOpclass(fout, dopt, (OpclassInfo *) dobj);
break;
case DO_OPFAMILY:
! dumpOpfamily(fout, dopt, (OpfamilyInfo *) dobj);
break;
case DO_COLLATION:
! dumpCollation(fout, dopt, (CollInfo *) dobj);
break;
case DO_CONVERSION:
! dumpConversion(fout, dopt, (ConvInfo *) dobj);
break;
case DO_TABLE:
! dumpTable(fout, dopt, (TableInfo *) dobj);
break;
case DO_ATTRDEF:
! dumpAttrDef(fout, dopt, (AttrDefInfo *) dobj);
break;
case DO_INDEX:
! dumpIndex(fout, dopt, (IndxInfo *) dobj);
break;
case DO_REFRESH_MATVIEW:
refreshMatViewData(fout, (TableDataInfo *) dobj);
break;
case DO_RULE:
! dumpRule(fout, dopt, (RuleInfo *) dobj);
break;
case DO_TRIGGER:
! dumpTrigger(fout, dopt, (TriggerInfo *) dobj);
break;
case DO_EVENT_TRIGGER:
! dumpEventTrigger(fout, dopt, (EventTriggerInfo *) dobj);
break;
case DO_CONSTRAINT:
! dumpConstraint(fout, dopt, (ConstraintInfo *) dobj);
break;
case DO_FK_CONSTRAINT:
! dumpConstraint(fout, dopt, (ConstraintInfo *) dobj);
break;
case DO_PROCLANG:
! dumpProcLang(fout, dopt, (ProcLangInfo *) dobj);
break;
case DO_CAST:
! dumpCast(fout, dopt, (CastInfo *) dobj);
break;
case DO_TRANSFORM:
! dumpTransform(fout, dopt, (TransformInfo *) dobj);
break;
case DO_TABLE_DATA:
if (((TableDataInfo *) dobj)->tdtable->relkind == RELKIND_SEQUENCE)
dumpSequenceData(fout, (TableDataInfo *) dobj);
else
! 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, dopt, (TSParserInfo *) dobj);
break;
case DO_TSDICT:
! dumpTSDictionary(fout, dopt, (TSDictInfo *) dobj);
break;
case DO_TSTEMPLATE:
! dumpTSTemplate(fout, dopt, (TSTemplateInfo *) dobj);
break;
case DO_TSCONFIG:
! dumpTSConfig(fout, dopt, (TSConfigInfo *) dobj);
break;
case DO_FDW:
! dumpForeignDataWrapper(fout, dopt, (FdwInfo *) dobj);
break;
case DO_FOREIGN_SERVER:
! dumpForeignServer(fout, dopt, (ForeignServerInfo *) dobj);
break;
case DO_DEFAULT_ACL:
! dumpDefaultACL(fout, dopt, (DefaultACLInfo *) dobj);
break;
case DO_BLOB:
! dumpBlob(fout, dopt, (BlobInfo *) dobj);
break;
case DO_BLOB_DATA:
ArchiveEntry(fout, dobj->catId, dobj->dumpId,
--- 8283,8393 ----
* ArchiveEntries (TOC objects) for each object to be dumped.
*/
static void
! dumpDumpableObject(Archive *fout, DumpableObject *dobj)
{
switch (dobj->objType)
{
case DO_NAMESPACE:
! dumpNamespace(fout, (NamespaceInfo *) dobj);
break;
case DO_EXTENSION:
! dumpExtension(fout, (ExtensionInfo *) dobj);
break;
case DO_TYPE:
! dumpType(fout, (TypeInfo *) dobj);
break;
case DO_SHELL_TYPE:
! dumpShellType(fout, (ShellTypeInfo *) dobj);
break;
case DO_FUNC:
! dumpFunc(fout, (FuncInfo *) dobj);
break;
case DO_AGG:
! dumpAgg(fout, (AggInfo *) dobj);
break;
case DO_OPERATOR:
! dumpOpr(fout, (OprInfo *) dobj);
break;
case DO_OPCLASS:
! dumpOpclass(fout, (OpclassInfo *) dobj);
break;
case DO_OPFAMILY:
! dumpOpfamily(fout, (OpfamilyInfo *) dobj);
break;
case DO_COLLATION:
! dumpCollation(fout, (CollInfo *) dobj);
break;
case DO_CONVERSION:
! dumpConversion(fout, (ConvInfo *) dobj);
break;
case DO_TABLE:
! dumpTable(fout, (TableInfo *) dobj);
break;
case DO_ATTRDEF:
! dumpAttrDef(fout, (AttrDefInfo *) dobj);
break;
case DO_INDEX:
! dumpIndex(fout, (IndxInfo *) dobj);
break;
case DO_REFRESH_MATVIEW:
refreshMatViewData(fout, (TableDataInfo *) dobj);
break;
case DO_RULE:
! dumpRule(fout, (RuleInfo *) dobj);
break;
case DO_TRIGGER:
! dumpTrigger(fout, (TriggerInfo *) dobj);
break;
case DO_EVENT_TRIGGER:
! dumpEventTrigger(fout, (EventTriggerInfo *) dobj);
break;
case DO_CONSTRAINT:
! dumpConstraint(fout, (ConstraintInfo *) dobj);
break;
case DO_FK_CONSTRAINT:
! dumpConstraint(fout, (ConstraintInfo *) dobj);
break;
case DO_PROCLANG:
! dumpProcLang(fout, (ProcLangInfo *) dobj);
break;
case DO_CAST:
! dumpCast(fout, (CastInfo *) dobj);
break;
case DO_TRANSFORM:
! dumpTransform(fout, (TransformInfo *) dobj);
break;
case DO_TABLE_DATA:
if (((TableDataInfo *) dobj)->tdtable->relkind == RELKIND_SEQUENCE)
dumpSequenceData(fout, (TableDataInfo *) dobj);
else
! dumpTableData(fout, (TableDataInfo *) dobj);
break;
case DO_DUMMY_TYPE:
/* table rowtypes and array types are never dumped separately */
break;
case DO_TSPARSER:
! dumpTSParser(fout, (TSParserInfo *) dobj);
break;
case DO_TSDICT:
! dumpTSDictionary(fout, (TSDictInfo *) dobj);
break;
case DO_TSTEMPLATE:
! dumpTSTemplate(fout, (TSTemplateInfo *) dobj);
break;
case DO_TSCONFIG:
! dumpTSConfig(fout, (TSConfigInfo *) dobj);
break;
case DO_FDW:
! dumpForeignDataWrapper(fout, (FdwInfo *) dobj);
break;
case DO_FOREIGN_SERVER:
! dumpForeignServer(fout, (ForeignServerInfo *) dobj);
break;
case DO_DEFAULT_ACL:
! dumpDefaultACL(fout, (DefaultACLInfo *) dobj);
break;
case DO_BLOB:
! dumpBlob(fout, (BlobInfo *) dobj);
break;
case DO_BLOB_DATA:
ArchiveEntry(fout, dobj->catId, dobj->dumpId,
*************** dumpDumpableObject(Archive *fout, DumpOp
*** 8378,8384 ****
dumpBlobs, NULL);
break;
case DO_POLICY:
! dumpPolicy(fout, dopt, (PolicyInfo *) dobj);
break;
case DO_PRE_DATA_BOUNDARY:
case DO_POST_DATA_BOUNDARY:
--- 8398,8404 ----
dumpBlobs, NULL);
break;
case DO_POLICY:
! dumpPolicy(fout, (PolicyInfo *) dobj);
break;
case DO_PRE_DATA_BOUNDARY:
case DO_POST_DATA_BOUNDARY:
*************** dumpDumpableObject(Archive *fout, DumpOp
*** 8392,8399 ****
* writes out to fout the queries to recreate a user-defined namespace
*/
static void
! dumpNamespace(Archive *fout, DumpOptions *dopt, NamespaceInfo *nspinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 8412,8420 ----
* writes out to fout the queries to recreate a user-defined namespace
*/
static void
! dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpNamespace(Archive *fout, DumpOptions
*** 8432,8445 ****
NULL, NULL);
/* Dump Schema Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
! dumpACL(fout, dopt, nspinfo->dobj.catId, nspinfo->dobj.dumpId, "SCHEMA",
qnspname, NULL, nspinfo->dobj.name, NULL,
nspinfo->rolname, nspinfo->nspacl);
--- 8453,8466 ----
NULL, NULL);
/* Dump Schema Comments and Security Labels */
! dumpComment(fout, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
! dumpSecLabel(fout, labelq->data,
NULL, nspinfo->rolname,
nspinfo->dobj.catId, 0, nspinfo->dobj.dumpId);
! dumpACL(fout, nspinfo->dobj.catId, nspinfo->dobj.dumpId, "SCHEMA",
qnspname, NULL, nspinfo->dobj.name, NULL,
nspinfo->rolname, nspinfo->nspacl);
*************** dumpNamespace(Archive *fout, DumpOptions
*** 8455,8462 ****
* writes out to fout the queries to recreate an extension
*/
static void
! dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 8476,8484 ----
* writes out to fout the queries to recreate an extension
*/
static void
! dumpExtension(Archive *fout, ExtensionInfo *extinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpExtension(Archive *fout, DumpOptions
*** 8560,8569 ****
NULL, NULL);
/* Dump Extension Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
--- 8582,8591 ----
NULL, NULL);
/* Dump Extension Comments and Security Labels */
! dumpComment(fout, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
! dumpSecLabel(fout, labelq->data,
NULL, "",
extinfo->dobj.catId, 0, extinfo->dobj.dumpId);
*************** dumpExtension(Archive *fout, DumpOptions
*** 8579,8603 ****
* writes out to fout the queries to recreate a user-defined type
*/
static void
! dumpType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
/* Skip if not to be dumped */
if (!tyinfo->dobj.dump || dopt->dataOnly)
return;
/* Dump out in proper style */
if (tyinfo->typtype == TYPTYPE_BASE)
! dumpBaseType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_DOMAIN)
! dumpDomain(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_COMPOSITE)
! dumpCompositeType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_ENUM)
! dumpEnumType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_RANGE)
! dumpRangeType(fout, dopt, tyinfo);
else if (tyinfo->typtype == TYPTYPE_PSEUDO && !tyinfo->isDefined)
! dumpUndefinedType(fout, dopt, tyinfo);
else
write_msg(NULL, "WARNING: typtype of data type \"%s\" appears to be invalid\n",
tyinfo->dobj.name);
--- 8601,8627 ----
* writes out to fout the queries to recreate a user-defined type
*/
static void
! dumpType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
+
/* Skip if not to be dumped */
if (!tyinfo->dobj.dump || dopt->dataOnly)
return;
/* Dump out in proper style */
if (tyinfo->typtype == TYPTYPE_BASE)
! dumpBaseType(fout, tyinfo);
else if (tyinfo->typtype == TYPTYPE_DOMAIN)
! dumpDomain(fout, tyinfo);
else if (tyinfo->typtype == TYPTYPE_COMPOSITE)
! dumpCompositeType(fout, tyinfo);
else if (tyinfo->typtype == TYPTYPE_ENUM)
! dumpEnumType(fout, tyinfo);
else if (tyinfo->typtype == TYPTYPE_RANGE)
! dumpRangeType(fout, tyinfo);
else if (tyinfo->typtype == TYPTYPE_PSEUDO && !tyinfo->isDefined)
! dumpUndefinedType(fout, tyinfo);
else
write_msg(NULL, "WARNING: typtype of data type \"%s\" appears to be invalid\n",
tyinfo->dobj.name);
*************** dumpType(Archive *fout, DumpOptions *dop
*** 8608,8615 ****
* writes out to fout the queries to recreate a user-defined enum type
*/
static void
! dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 8632,8640 ----
* writes out to fout the queries to recreate a user-defined enum type
*/
static void
! dumpEnumType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpEnumType(Archive *fout, DumpOptions
*** 8713,8726 ****
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 8738,8751 ----
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpEnumType(Archive *fout, DumpOptions
*** 8737,8744 ****
* writes out to fout the queries to recreate a user-defined range type
*/
static void
! dumpRangeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 8762,8770 ----
* writes out to fout the queries to recreate a user-defined range type
*/
static void
! dumpRangeType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpRangeType(Archive *fout, DumpOptions
*** 8845,8858 ****
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 8871,8884 ----
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpRangeType(Archive *fout, DumpOptions
*** 8874,8881 ****
* depending on it.
*/
static void
! dumpUndefinedType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 8900,8908 ----
* depending on it.
*/
static void
! dumpUndefinedType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpUndefinedType(Archive *fout, DumpOpt
*** 8914,8927 ****
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 8941,8954 ----
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpUndefinedType(Archive *fout, DumpOpt
*** 8936,8943 ****
* writes out to fout the queries to recreate a user-defined base type
*/
static void
! dumpBaseType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 8963,8971 ----
* writes out to fout the queries to recreate a user-defined base type
*/
static void
! dumpBaseType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpBaseType(Archive *fout, DumpOptions
*** 9302,9315 ****
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 9330,9343 ----
NULL, NULL);
/* Dump Type Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpBaseType(Archive *fout, DumpOptions
*** 9326,9333 ****
* writes out to fout the queries to recreate a user-defined domain
*/
static void
! dumpDomain(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 9354,9362 ----
* writes out to fout the queries to recreate a user-defined domain
*/
static void
! dumpDomain(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpDomain(Archive *fout, DumpOptions *d
*** 9464,9477 ****
NULL, NULL);
/* Dump Domain Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 9493,9506 ----
NULL, NULL);
/* Dump Domain Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpDomain(Archive *fout, DumpOptions *d
*** 9486,9492 ****
fmtId(domcheck->dobj.name));
appendPQExpBuffer(labelq, "ON DOMAIN %s",
fmtId(qtypname));
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname,
domcheck->dobj.catId, 0, tyinfo->dobj.dumpId);
--- 9515,9521 ----
fmtId(domcheck->dobj.name));
appendPQExpBuffer(labelq, "ON DOMAIN %s",
fmtId(qtypname));
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname,
domcheck->dobj.catId, 0, tyinfo->dobj.dumpId);
*************** dumpDomain(Archive *fout, DumpOptions *d
*** 9505,9512 ****
* composite type
*/
static void
! dumpCompositeType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer dropped = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
--- 9534,9542 ----
* composite type
*/
static void
! dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer dropped = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
*************** dumpCompositeType(Archive *fout, DumpOpt
*** 9690,9703 ****
/* Dump Type Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpACL(fout, dopt, tyinfo->dobj.catId, tyinfo->dobj.dumpId, "TYPE",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
--- 9720,9733 ----
/* Dump Type Comments and Security Labels */
! dumpComment(fout, labelq->data,
tyinfo->dobj.namespace->dobj.name, tyinfo->rolname,
tyinfo->dobj.catId, 0, tyinfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
qtypname, NULL, tyinfo->dobj.name,
tyinfo->dobj.namespace->dobj.name,
tyinfo->rolname, tyinfo->typacl);
*************** dumpCompositeTypeColComments(Archive *fo
*** 9828,9835 ****
* We dump a shell definition in advance of the I/O functions for the type.
*/
static void
! dumpShellType(Archive *fout, DumpOptions *dopt, ShellTypeInfo *stinfo)
{
PQExpBuffer q;
/* Skip if not to be dumped */
--- 9858,9866 ----
* We dump a shell definition in advance of the I/O functions for the type.
*/
static void
! dumpShellType(Archive *fout, ShellTypeInfo *stinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
/* Skip if not to be dumped */
*************** shouldDumpProcLangs(DumpOptions *dopt)
*** 9899,9906 ****
* procedural language
*/
static void
! dumpProcLang(Archive *fout, DumpOptions *dopt, ProcLangInfo *plang)
{
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
--- 9930,9938 ----
* procedural language
*/
static void
! dumpProcLang(Archive *fout, ProcLangInfo *plang)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
*************** dumpProcLang(Archive *fout, DumpOptions
*** 10037,10051 ****
NULL, NULL);
/* Dump Proc Lang Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
if (plang->lanpltrusted)
! dumpACL(fout, dopt, plang->dobj.catId, plang->dobj.dumpId, "LANGUAGE",
qlanname, NULL, plang->dobj.name,
lanschema,
plang->lanowner, plang->lanacl);
--- 10069,10083 ----
NULL, NULL);
/* Dump Proc Lang Comments and Security Labels */
! dumpComment(fout, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
! dumpSecLabel(fout, labelq->data,
NULL, "",
plang->dobj.catId, 0, plang->dobj.dumpId);
if (plang->lanpltrusted)
! dumpACL(fout, plang->dobj.catId, plang->dobj.dumpId, "LANGUAGE",
qlanname, NULL, plang->dobj.name,
lanschema,
plang->lanowner, plang->lanacl);
*************** format_function_signature(Archive *fout,
*** 10192,10199 ****
* dump out one function
*/
static void
! dumpFunc(Archive *fout, DumpOptions *dopt, FuncInfo *finfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delqry;
--- 10224,10232 ----
* dump out one function
*/
static void
! dumpFunc(Archive *fout, FuncInfo *finfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delqry;
*************** dumpFunc(Archive *fout, DumpOptions *dop
*** 10703,10716 ****
NULL, NULL);
/* Dump Function Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
finfo->dobj.namespace->dobj.name, finfo->rolname,
finfo->dobj.catId, 0, finfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
finfo->dobj.namespace->dobj.name, finfo->rolname,
finfo->dobj.catId, 0, finfo->dobj.dumpId);
! dumpACL(fout, dopt, finfo->dobj.catId, finfo->dobj.dumpId, "FUNCTION",
funcsig, NULL, funcsig_tag,
finfo->dobj.namespace->dobj.name,
finfo->rolname, finfo->proacl);
--- 10736,10749 ----
NULL, NULL);
/* Dump Function Comments and Security Labels */
! dumpComment(fout, labelq->data,
finfo->dobj.namespace->dobj.name, finfo->rolname,
finfo->dobj.catId, 0, finfo->dobj.dumpId);
! dumpSecLabel(fout, 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",
funcsig, NULL, funcsig_tag,
finfo->dobj.namespace->dobj.name,
finfo->rolname, finfo->proacl);
*************** dumpFunc(Archive *fout, DumpOptions *dop
*** 10741,10748 ****
* Dump a user-defined cast
*/
static void
! dumpCast(Archive *fout, DumpOptions *dopt, CastInfo *cast)
{
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
--- 10774,10782 ----
* Dump a user-defined cast
*/
static void
! dumpCast(Archive *fout, CastInfo *cast)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
*************** dumpCast(Archive *fout, DumpOptions *dop
*** 10830,10836 ****
NULL, NULL);
/* Dump Cast Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
cast->dobj.catId, 0, cast->dobj.dumpId);
--- 10864,10870 ----
NULL, NULL);
/* Dump Cast Comments */
! dumpComment(fout, labelq->data,
NULL, "",
cast->dobj.catId, 0, cast->dobj.dumpId);
*************** dumpCast(Archive *fout, DumpOptions *dop
*** 10846,10853 ****
* Dump a transform
*/
static void
! dumpTransform(Archive *fout, DumpOptions *dopt, TransformInfo *transform)
{
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
--- 10880,10888 ----
* Dump a transform
*/
static void
! dumpTransform(Archive *fout, TransformInfo *transform)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer defqry;
PQExpBuffer delqry;
PQExpBuffer labelq;
*************** dumpTransform(Archive *fout, DumpOptions
*** 10949,10955 ****
NULL, NULL);
/* Dump Transform Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
transform->dobj.catId, 0, transform->dobj.dumpId);
--- 10984,10990 ----
NULL, NULL);
/* Dump Transform Comments */
! dumpComment(fout, labelq->data,
NULL, "",
transform->dobj.catId, 0, transform->dobj.dumpId);
*************** dumpTransform(Archive *fout, DumpOptions
*** 10966,10973 ****
* write out a single operator definition
*/
static void
! dumpOpr(Archive *fout, DumpOptions *dopt, OprInfo *oprinfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 11001,11009 ----
* write out a single operator definition
*/
static void
! dumpOpr(Archive *fout, OprInfo *oprinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpOpr(Archive *fout, DumpOptions *dopt
*** 11204,11210 ****
NULL, NULL);
/* Dump Operator Comments */
! dumpComment(fout, dopt, labelq->data,
oprinfo->dobj.namespace->dobj.name, oprinfo->rolname,
oprinfo->dobj.catId, 0, oprinfo->dobj.dumpId);
--- 11240,11246 ----
NULL, NULL);
/* Dump Operator Comments */
! dumpComment(fout, labelq->data,
oprinfo->dobj.namespace->dobj.name, oprinfo->rolname,
oprinfo->dobj.catId, 0, oprinfo->dobj.dumpId);
*************** convertTSFunction(Archive *fout, Oid fun
*** 11354,11361 ****
* write out a single operator class definition
*/
static void
! dumpOpclass(Archive *fout, DumpOptions *dopt, OpclassInfo *opcinfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 11390,11398 ----
* write out a single operator class definition
*/
static void
! dumpOpclass(Archive *fout, OpclassInfo *opcinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpOpclass(Archive *fout, DumpOptions *
*** 11712,11718 ****
NULL, NULL);
/* Dump Operator Class Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, opcinfo->rolname,
opcinfo->dobj.catId, 0, opcinfo->dobj.dumpId);
--- 11749,11755 ----
NULL, NULL);
/* Dump Operator Class Comments */
! dumpComment(fout, labelq->data,
NULL, opcinfo->rolname,
opcinfo->dobj.catId, 0, opcinfo->dobj.dumpId);
*************** dumpOpclass(Archive *fout, DumpOptions *
*** 11731,11738 ****
* specific opclass within the opfamily.
*/
static void
! dumpOpfamily(Archive *fout, DumpOptions *dopt, OpfamilyInfo *opfinfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 11768,11776 ----
* specific opclass within the opfamily.
*/
static void
! dumpOpfamily(Archive *fout, OpfamilyInfo *opfinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpOpfamily(Archive *fout, DumpOptions
*** 12025,12031 ****
NULL, NULL);
/* Dump Operator Family Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, opfinfo->rolname,
opfinfo->dobj.catId, 0, opfinfo->dobj.dumpId);
--- 12063,12069 ----
NULL, NULL);
/* Dump Operator Family Comments */
! dumpComment(fout, labelq->data,
NULL, opfinfo->rolname,
opfinfo->dobj.catId, 0, opfinfo->dobj.dumpId);
*************** dumpOpfamily(Archive *fout, DumpOptions
*** 12043,12050 ****
* write out a single collation definition
*/
static void
! dumpCollation(Archive *fout, DumpOptions *dopt, CollInfo *collinfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 12081,12089 ----
* write out a single collation definition
*/
static void
! dumpCollation(Archive *fout, CollInfo *collinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpCollation(Archive *fout, DumpOptions
*** 12114,12120 ****
NULL, NULL);
/* Dump Collation Comments */
! dumpComment(fout, dopt, labelq->data,
collinfo->dobj.namespace->dobj.name, collinfo->rolname,
collinfo->dobj.catId, 0, collinfo->dobj.dumpId);
--- 12153,12159 ----
NULL, NULL);
/* Dump Collation Comments */
! dumpComment(fout, labelq->data,
collinfo->dobj.namespace->dobj.name, collinfo->rolname,
collinfo->dobj.catId, 0, collinfo->dobj.dumpId);
*************** dumpCollation(Archive *fout, DumpOptions
*** 12131,12138 ****
* write out a single conversion definition
*/
static void
! dumpConversion(Archive *fout, DumpOptions *dopt, ConvInfo *convinfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 12170,12178 ----
* write out a single conversion definition
*/
static void
! dumpConversion(Archive *fout, ConvInfo *convinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpConversion(Archive *fout, DumpOption
*** 12213,12219 ****
NULL, NULL);
/* Dump Conversion Comments */
! dumpComment(fout, dopt, labelq->data,
convinfo->dobj.namespace->dobj.name, convinfo->rolname,
convinfo->dobj.catId, 0, convinfo->dobj.dumpId);
--- 12253,12259 ----
NULL, NULL);
/* Dump Conversion Comments */
! dumpComment(fout, labelq->data,
convinfo->dobj.namespace->dobj.name, convinfo->rolname,
convinfo->dobj.catId, 0, convinfo->dobj.dumpId);
*************** format_aggregate_signature(AggInfo *aggi
*** 12270,12277 ****
* write out a single aggregate definition
*/
static void
! dumpAgg(Archive *fout, DumpOptions *dopt, AggInfo *agginfo)
{
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
--- 12310,12318 ----
* write out a single aggregate definition
*/
static void
! dumpAgg(Archive *fout, AggInfo *agginfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpAgg(Archive *fout, DumpOptions *dopt
*** 12609,12618 ****
NULL, NULL);
/* Dump Aggregate Comments */
! 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, dopt, labelq->data,
agginfo->aggfn.dobj.namespace->dobj.name, agginfo->aggfn.rolname,
agginfo->aggfn.dobj.catId, 0, agginfo->aggfn.dobj.dumpId);
--- 12650,12659 ----
NULL, NULL);
/* Dump Aggregate Comments */
! dumpComment(fout, labelq->data,
agginfo->aggfn.dobj.namespace->dobj.name, agginfo->aggfn.rolname,
agginfo->aggfn.dobj.catId, 0, agginfo->aggfn.dobj.dumpId);
! dumpSecLabel(fout, labelq->data,
agginfo->aggfn.dobj.namespace->dobj.name, agginfo->aggfn.rolname,
agginfo->aggfn.dobj.catId, 0, agginfo->aggfn.dobj.dumpId);
*************** dumpAgg(Archive *fout, DumpOptions *dopt
*** 12627,12633 ****
aggsig = format_function_signature(fout, &agginfo->aggfn, true);
aggsig_tag = format_function_signature(fout, &agginfo->aggfn, false);
! dumpACL(fout, dopt, agginfo->aggfn.dobj.catId, agginfo->aggfn.dobj.dumpId,
"FUNCTION",
aggsig, NULL, aggsig_tag,
agginfo->aggfn.dobj.namespace->dobj.name,
--- 12668,12674 ----
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,
"FUNCTION",
aggsig, NULL, aggsig_tag,
agginfo->aggfn.dobj.namespace->dobj.name,
*************** dumpAgg(Archive *fout, DumpOptions *dopt
*** 12652,12659 ****
* write out a single text search parser
*/
static void
! dumpTSParser(Archive *fout, DumpOptions *dopt, TSParserInfo *prsinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 12693,12701 ----
* write out a single text search parser
*/
static void
! dumpTSParser(Archive *fout, TSParserInfo *prsinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpTSParser(Archive *fout, DumpOptions
*** 12709,12715 ****
NULL, NULL);
/* Dump Parser Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
prsinfo->dobj.catId, 0, prsinfo->dobj.dumpId);
--- 12751,12757 ----
NULL, NULL);
/* Dump Parser Comments */
! dumpComment(fout, labelq->data,
NULL, "",
prsinfo->dobj.catId, 0, prsinfo->dobj.dumpId);
*************** dumpTSParser(Archive *fout, DumpOptions
*** 12723,12730 ****
* write out a single text search dictionary
*/
static void
! dumpTSDictionary(Archive *fout, DumpOptions *dopt, TSDictInfo *dictinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 12765,12773 ----
* write out a single text search dictionary
*/
static void
! dumpTSDictionary(Archive *fout, TSDictInfo *dictinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpTSDictionary(Archive *fout, DumpOpti
*** 12796,12802 ****
NULL, NULL);
/* Dump Dictionary Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, dictinfo->rolname,
dictinfo->dobj.catId, 0, dictinfo->dobj.dumpId);
--- 12839,12845 ----
NULL, NULL);
/* Dump Dictionary Comments */
! dumpComment(fout, labelq->data,
NULL, dictinfo->rolname,
dictinfo->dobj.catId, 0, dictinfo->dobj.dumpId);
*************** dumpTSDictionary(Archive *fout, DumpOpti
*** 12811,12818 ****
* write out a single text search template
*/
static void
! dumpTSTemplate(Archive *fout, DumpOptions *dopt, TSTemplateInfo *tmplinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 12854,12862 ----
* write out a single text search template
*/
static void
! dumpTSTemplate(Archive *fout, TSTemplateInfo *tmplinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpTSTemplate(Archive *fout, DumpOption
*** 12862,12868 ****
NULL, NULL);
/* Dump Template Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, "",
tmplinfo->dobj.catId, 0, tmplinfo->dobj.dumpId);
--- 12906,12912 ----
NULL, NULL);
/* Dump Template Comments */
! dumpComment(fout, labelq->data,
NULL, "",
tmplinfo->dobj.catId, 0, tmplinfo->dobj.dumpId);
*************** dumpTSTemplate(Archive *fout, DumpOption
*** 12876,12883 ****
* write out a single text search configuration
*/
static void
! dumpTSConfig(Archive *fout, DumpOptions *dopt, TSConfigInfo *cfginfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 12920,12928 ----
* write out a single text search configuration
*/
static void
! dumpTSConfig(Archive *fout, TSConfigInfo *cfginfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpTSConfig(Archive *fout, DumpOptions
*** 12990,12996 ****
NULL, NULL);
/* Dump Configuration Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, cfginfo->rolname,
cfginfo->dobj.catId, 0, cfginfo->dobj.dumpId);
--- 13035,13041 ----
NULL, NULL);
/* Dump Configuration Comments */
! dumpComment(fout, labelq->data,
NULL, cfginfo->rolname,
cfginfo->dobj.catId, 0, cfginfo->dobj.dumpId);
*************** dumpTSConfig(Archive *fout, DumpOptions
*** 13005,13012 ****
* write out a single foreign-data wrapper definition
*/
static void
! dumpForeignDataWrapper(Archive *fout, DumpOptions *dopt, FdwInfo *fdwinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 13050,13058 ----
* write out a single foreign-data wrapper definition
*/
static void
! dumpForeignDataWrapper(Archive *fout, FdwInfo *fdwinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpForeignDataWrapper(Archive *fout, Du
*** 13064,13077 ****
NULL, NULL);
/* Handle the ACL */
! 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, dopt, labelq->data,
NULL, fdwinfo->rolname,
fdwinfo->dobj.catId, 0, fdwinfo->dobj.dumpId);
--- 13110,13123 ----
NULL, NULL);
/* Handle the ACL */
! dumpACL(fout, 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,
NULL, fdwinfo->rolname,
fdwinfo->dobj.catId, 0, fdwinfo->dobj.dumpId);
*************** dumpForeignDataWrapper(Archive *fout, Du
*** 13087,13094 ****
* write out a foreign server definition
*/
static void
! dumpForeignServer(Archive *fout, DumpOptions *dopt, ForeignServerInfo *srvinfo)
{
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
--- 13133,13141 ----
* write out a foreign server definition
*/
static void
! dumpForeignServer(Archive *fout, ForeignServerInfo *srvinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer delq;
PQExpBuffer labelq;
*************** dumpForeignServer(Archive *fout, DumpOpt
*** 13156,13162 ****
NULL, NULL);
/* Handle the ACL */
! dumpACL(fout, dopt, srvinfo->dobj.catId, srvinfo->dobj.dumpId,
"FOREIGN SERVER",
qsrvname, NULL, srvinfo->dobj.name,
NULL, srvinfo->rolname,
--- 13203,13209 ----
NULL, NULL);
/* Handle the ACL */
! dumpACL(fout, srvinfo->dobj.catId, srvinfo->dobj.dumpId,
"FOREIGN SERVER",
qsrvname, NULL, srvinfo->dobj.name,
NULL, srvinfo->rolname,
*************** dumpForeignServer(Archive *fout, DumpOpt
*** 13169,13175 ****
srvinfo->dobj.catId, srvinfo->dobj.dumpId);
/* Dump Foreign Server Comments */
! dumpComment(fout, dopt, labelq->data,
NULL, srvinfo->rolname,
srvinfo->dobj.catId, 0, srvinfo->dobj.dumpId);
--- 13216,13222 ----
srvinfo->dobj.catId, srvinfo->dobj.dumpId);
/* Dump Foreign Server Comments */
! dumpComment(fout, labelq->data,
NULL, srvinfo->rolname,
srvinfo->dobj.catId, 0, srvinfo->dobj.dumpId);
*************** dumpUserMappings(Archive *fout,
*** 13285,13292 ****
* Write out default privileges information
*/
static void
! dumpDefaultACL(Archive *fout, DumpOptions *dopt, DefaultACLInfo *daclinfo)
{
PQExpBuffer q;
PQExpBuffer tag;
const char *type;
--- 13332,13340 ----
* Write out default privileges information
*/
static void
! dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q;
PQExpBuffer tag;
const char *type;
*************** dumpDefaultACL(Archive *fout, DumpOption
*** 13365,13375 ****
*----------
*/
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)
{
PQExpBuffer sql;
/* Do nothing if ACL dump is not enabled */
--- 13413,13424 ----
*----------
*/
static void
! dumpACL(Archive *fout, 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)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer sql;
/* Do nothing if ACL dump is not enabled */
*************** dumpACL(Archive *fout, DumpOptions *dopt
*** 13420,13429 ****
* calling ArchiveEntry() for the specified object.
*/
static void
! dumpSecLabel(Archive *fout, DumpOptions *dopt, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
SecLabelItem *labels;
int nlabels;
int i;
--- 13469,13479 ----
* calling ArchiveEntry() for the specified object.
*/
static void
! dumpSecLabel(Archive *fout, const char *target,
const char *namespace, const char *owner,
CatalogId catalogId, int subid, DumpId dumpId)
{
+ DumpOptions *dopt = fout->dopt;
SecLabelItem *labels;
int nlabels;
int i;
*************** dumpSecLabel(Archive *fout, DumpOptions
*** 13484,13491 ****
* and its columns.
*/
static void
! dumpTableSecLabel(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo, const char *reltypename)
{
SecLabelItem *labels;
int nlabels;
int i;
--- 13534,13542 ----
* and its columns.
*/
static void
! dumpTableSecLabel(Archive *fout, TableInfo *tbinfo, const char *reltypename)
{
+ DumpOptions *dopt = fout->dopt;
SecLabelItem *labels;
int nlabels;
int i;
*************** collectSecLabels(Archive *fout, SecLabel
*** 13705,13724 ****
* write out to fout the declarations (not data) of a user-defined table
*/
static void
! dumpTable(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
if (tbinfo->dobj.dump && !dopt->dataOnly)
{
char *namecopy;
if (tbinfo->relkind == RELKIND_SEQUENCE)
! dumpSequence(fout, dopt, tbinfo);
else
! dumpTableSchema(fout, dopt, tbinfo);
/* Handle the ACL here */
namecopy = pg_strdup(fmtId(tbinfo->dobj.name));
! dumpACL(fout, dopt, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
(tbinfo->relkind == RELKIND_SEQUENCE) ? "SEQUENCE" :
"TABLE",
namecopy, NULL, tbinfo->dobj.name,
--- 13756,13777 ----
* write out to fout the declarations (not data) of a user-defined table
*/
static void
! dumpTable(Archive *fout, TableInfo *tbinfo)
{
+ DumpOptions *dopt = fout->dopt;
+
if (tbinfo->dobj.dump && !dopt->dataOnly)
{
char *namecopy;
if (tbinfo->relkind == RELKIND_SEQUENCE)
! dumpSequence(fout, tbinfo);
else
! dumpTableSchema(fout, tbinfo);
/* Handle the ACL here */
namecopy = pg_strdup(fmtId(tbinfo->dobj.name));
! dumpACL(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
(tbinfo->relkind == RELKIND_SEQUENCE) ? "SEQUENCE" :
"TABLE",
namecopy, NULL, tbinfo->dobj.name,
*************** dumpTable(Archive *fout, DumpOptions *do
*** 13753,13759 ****
attnamecopy = pg_strdup(fmtId(attname));
acltag = psprintf("%s.%s", tbinfo->dobj.name, attname);
/* Column's GRANT type is always TABLE */
! dumpACL(fout, dopt, tbinfo->dobj.catId, tbinfo->dobj.dumpId, "TABLE",
namecopy, attnamecopy, acltag,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
attacl);
--- 13806,13812 ----
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",
namecopy, attnamecopy, acltag,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
attacl);
*************** createViewAsClause(Archive *fout, TableI
*** 13830,13837 ****
* write the declaration (not data) of one user-defined table or view
*/
static void
! dumpTableSchema(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
--- 13883,13891 ----
* write the declaration (not data) of one user-defined table or view
*/
static void
! dumpTableSchema(Archive *fout, TableInfo *tbinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer q = createPQExpBuffer();
PQExpBuffer delq = createPQExpBuffer();
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpTableSchema(Archive *fout, DumpOptio
*** 14456,14465 ****
/* Dump Table Comments */
! dumpTableComment(fout, dopt, tbinfo, reltypename);
/* Dump Table Security Labels */
! dumpTableSecLabel(fout, dopt, tbinfo, reltypename);
/* Dump comments on inlined table constraints */
for (j = 0; j < tbinfo->ncheck; j++)
--- 14510,14519 ----
/* Dump Table Comments */
! dumpTableComment(fout, tbinfo, reltypename);
/* Dump Table Security Labels */
! dumpTableSecLabel(fout, tbinfo, reltypename);
/* Dump comments on inlined table constraints */
for (j = 0; j < tbinfo->ncheck; j++)
*************** dumpTableSchema(Archive *fout, DumpOptio
*** 14469,14475 ****
if (constr->separate || !constr->conislocal)
continue;
! dumpTableConstraintComment(fout, dopt, constr);
}
destroyPQExpBuffer(q);
--- 14523,14529 ----
if (constr->separate || !constr->conislocal)
continue;
! dumpTableConstraintComment(fout, constr);
}
destroyPQExpBuffer(q);
*************** dumpTableSchema(Archive *fout, DumpOptio
*** 14481,14488 ****
* dumpAttrDef --- dump an attribute's default-value declaration
*/
static void
! dumpAttrDef(Archive *fout, DumpOptions *dopt, AttrDefInfo *adinfo)
{
TableInfo *tbinfo = adinfo->adtable;
int adnum = adinfo->adnum;
PQExpBuffer q;
--- 14535,14543 ----
* dumpAttrDef --- dump an attribute's default-value declaration
*/
static void
! dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = adinfo->adtable;
int adnum = adinfo->adnum;
PQExpBuffer q;
*************** getAttrName(int attrnum, TableInfo *tblI
*** 14568,14575 ****
* write out to fout a user-defined index
*/
static void
! dumpIndex(Archive *fout, DumpOptions *dopt, IndxInfo *indxinfo)
{
TableInfo *tbinfo = indxinfo->indextable;
bool is_constraint = (indxinfo->indexconstraint != 0);
PQExpBuffer q;
--- 14623,14631 ----
* write out to fout a user-defined index
*/
static void
! dumpIndex(Archive *fout, IndxInfo *indxinfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = indxinfo->indextable;
bool is_constraint = (indxinfo->indexconstraint != 0);
PQExpBuffer q;
*************** dumpIndex(Archive *fout, DumpOptions *do
*** 14641,14647 ****
}
/* Dump Index Comments */
! dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
indxinfo->dobj.catId, 0,
--- 14697,14703 ----
}
/* Dump Index Comments */
! dumpComment(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
indxinfo->dobj.catId, 0,
*************** dumpIndex(Archive *fout, DumpOptions *do
*** 14658,14665 ****
* write out to fout a user-defined constraint
*/
static void
! dumpConstraint(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo)
{
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer q;
PQExpBuffer delq;
--- 14714,14722 ----
* write out to fout a user-defined constraint
*/
static void
! dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer q;
PQExpBuffer delq;
*************** dumpConstraint(Archive *fout, DumpOption
*** 14879,14885 ****
/* Dump Constraint Comments --- only works for table constraints */
if (tbinfo && coninfo->separate)
! dumpTableConstraintComment(fout, dopt, coninfo);
destroyPQExpBuffer(q);
destroyPQExpBuffer(delq);
--- 14936,14942 ----
/* Dump Constraint Comments --- only works for table constraints */
if (tbinfo && coninfo->separate)
! dumpTableConstraintComment(fout, coninfo);
destroyPQExpBuffer(q);
destroyPQExpBuffer(delq);
*************** dumpConstraint(Archive *fout, DumpOption
*** 14893,14899 ****
* or as a separate ALTER command.
*/
static void
! dumpTableConstraintComment(Archive *fout, DumpOptions *dopt, ConstraintInfo *coninfo)
{
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer labelq = createPQExpBuffer();
--- 14950,14956 ----
* or as a separate ALTER command.
*/
static void
! dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
{
TableInfo *tbinfo = coninfo->contable;
PQExpBuffer labelq = createPQExpBuffer();
*************** dumpTableConstraintComment(Archive *fout
*** 14902,14908 ****
fmtId(coninfo->dobj.name));
appendPQExpBuffer(labelq, "ON %s",
fmtId(tbinfo->dobj.name));
! dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
coninfo->dobj.catId, 0,
--- 14959,14965 ----
fmtId(coninfo->dobj.name));
appendPQExpBuffer(labelq, "ON %s",
fmtId(tbinfo->dobj.name));
! dumpComment(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
coninfo->dobj.catId, 0,
*************** findLastBuiltinOid_V70(Archive *fout)
*** 14962,14969 ****
* write the declaration (not data) of one user-defined sequence
*/
static void
! dumpSequence(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo)
{
PGresult *res;
char *startv,
*incby,
--- 15019,15027 ----
* write the declaration (not data) of one user-defined sequence
*/
static void
! dumpSequence(Archive *fout, TableInfo *tbinfo)
{
+ DumpOptions *dopt = fout->dopt;
PGresult *res;
char *startv,
*incby,
*************** dumpSequence(Archive *fout, DumpOptions
*** 15148,15157 ****
}
/* Dump Sequence Comments and Security Labels */
! dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
! dumpSecLabel(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
--- 15206,15215 ----
}
/* Dump Sequence Comments and Security Labels */
! dumpComment(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
! dumpSecLabel(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tbinfo->dobj.catId, 0, tbinfo->dobj.dumpId);
*************** dumpSequenceData(Archive *fout, TableDat
*** 15222,15229 ****
* write the declaration of one user-defined table trigger
*/
static void
! dumpTrigger(Archive *fout, DumpOptions *dopt, TriggerInfo *tginfo)
{
TableInfo *tbinfo = tginfo->tgtable;
PQExpBuffer query;
PQExpBuffer delqry;
--- 15280,15288 ----
* write the declaration of one user-defined table trigger
*/
static void
! dumpTrigger(Archive *fout, TriggerInfo *tginfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = tginfo->tgtable;
PQExpBuffer query;
PQExpBuffer delqry;
*************** dumpTrigger(Archive *fout, DumpOptions *
*** 15418,15424 ****
NULL, 0,
NULL, NULL);
! dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tginfo->dobj.catId, 0, tginfo->dobj.dumpId);
--- 15477,15483 ----
NULL, 0,
NULL, NULL);
! dumpComment(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
tginfo->dobj.catId, 0, tginfo->dobj.dumpId);
*************** dumpTrigger(Archive *fout, DumpOptions *
*** 15432,15439 ****
* write the declaration of one user-defined event trigger
*/
static void
! dumpEventTrigger(Archive *fout, DumpOptions *dopt, EventTriggerInfo *evtinfo)
{
PQExpBuffer query;
PQExpBuffer labelq;
--- 15491,15499 ----
* write the declaration of one user-defined event trigger
*/
static void
! dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PQExpBuffer labelq;
*************** dumpEventTrigger(Archive *fout, DumpOpti
*** 15489,15495 ****
"EVENT TRIGGER", SECTION_POST_DATA,
query->data, "", NULL, NULL, 0, NULL, NULL);
! dumpComment(fout, dopt, labelq->data,
NULL, evtinfo->evtowner,
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
--- 15549,15555 ----
"EVENT TRIGGER", SECTION_POST_DATA,
query->data, "", NULL, NULL, 0, NULL, NULL);
! dumpComment(fout, labelq->data,
NULL, evtinfo->evtowner,
evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
*************** dumpEventTrigger(Archive *fout, DumpOpti
*** 15502,15509 ****
* Dump a rule
*/
static void
! dumpRule(Archive *fout, DumpOptions *dopt, RuleInfo *rinfo)
{
TableInfo *tbinfo = rinfo->ruletable;
PQExpBuffer query;
PQExpBuffer cmd;
--- 15562,15570 ----
* Dump a rule
*/
static void
! dumpRule(Archive *fout, RuleInfo *rinfo)
{
+ DumpOptions *dopt = fout->dopt;
TableInfo *tbinfo = rinfo->ruletable;
PQExpBuffer query;
PQExpBuffer cmd;
*************** dumpRule(Archive *fout, DumpOptions *dop
*** 15618,15624 ****
NULL, NULL);
/* Dump rule comments */
! dumpComment(fout, dopt, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
rinfo->dobj.catId, 0, rinfo->dobj.dumpId);
--- 15679,15685 ----
NULL, NULL);
/* Dump rule comments */
! dumpComment(fout, labelq->data,
tbinfo->dobj.namespace->dobj.name,
tbinfo->rolname,
rinfo->dobj.catId, 0, rinfo->dobj.dumpId);
*************** dumpRule(Archive *fout, DumpOptions *dop
*** 15662,15670 ****
* but perhaps we can provide a better solution in the future.
*/
void
! getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[],
int numExtensions)
{
PQExpBuffer query;
PGresult *res;
int ntups,
--- 15723,15732 ----
* but perhaps we can provide a better solution in the future.
*/
void
! getExtensionMembership(Archive *fout, ExtensionInfo extinfo[],
int numExtensions)
{
+ DumpOptions *dopt = fout->dopt;
PQExpBuffer query;
PGresult *res;
int ntups,
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index ba37c4c..ec83d02 100644
*** a/src/bin/pg_dump/pg_dump.h
--- b/src/bin/pg_dump/pg_dump.h
*************** extern char g_opaque_type[10]; /* name f
*** 493,499 ****
* common utility functions
*/
! extern TableInfo *getSchemaData(Archive *, DumpOptions *dopt, int *numTablesPtr);
extern void AssignDumpId(DumpableObject *dobj);
extern DumpId createDumpId(void);
--- 493,499 ----
* common utility functions
*/
! extern TableInfo *getSchemaData(Archive *fout, int *numTablesPtr);
extern void AssignDumpId(DumpableObject *dobj);
extern DumpId createDumpId(void);
*************** extern void sortDataAndIndexObjectsBySiz
*** 527,542 ****
* version specific routines
*/
extern NamespaceInfo *getNamespaces(Archive *fout, int *numNamespaces);
! extern ExtensionInfo *getExtensions(Archive *fout, DumpOptions *dopt, int *numExtensions);
extern TypeInfo *getTypes(Archive *fout, int *numTypes);
! extern FuncInfo *getFuncs(Archive *fout, DumpOptions *dopt, int *numFuncs);
! extern AggInfo *getAggregates(Archive *fout, DumpOptions *dopt, int *numAggregates);
extern OprInfo *getOperators(Archive *fout, int *numOperators);
extern OpclassInfo *getOpclasses(Archive *fout, int *numOpclasses);
extern OpfamilyInfo *getOpfamilies(Archive *fout, int *numOpfamilies);
extern CollInfo *getCollations(Archive *fout, int *numCollations);
extern ConvInfo *getConversions(Archive *fout, int *numConversions);
! extern TableInfo *getTables(Archive *fout, DumpOptions *dopt, int *numTables);
extern void getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables);
extern InhInfo *getInherits(Archive *fout, int *numInherits);
extern void getIndexes(Archive *fout, TableInfo tblinfo[], int numTables);
--- 527,542 ----
* version specific routines
*/
extern NamespaceInfo *getNamespaces(Archive *fout, int *numNamespaces);
! extern ExtensionInfo *getExtensions(Archive *fout, int *numExtensions);
extern TypeInfo *getTypes(Archive *fout, int *numTypes);
! extern FuncInfo *getFuncs(Archive *fout, int *numFuncs);
! extern AggInfo *getAggregates(Archive *fout, int *numAggregates);
extern OprInfo *getOperators(Archive *fout, int *numOperators);
extern OpclassInfo *getOpclasses(Archive *fout, int *numOpclasses);
extern OpfamilyInfo *getOpfamilies(Archive *fout, int *numOpfamilies);
extern CollInfo *getCollations(Archive *fout, int *numCollations);
extern ConvInfo *getConversions(Archive *fout, int *numConversions);
! extern TableInfo *getTables(Archive *fout, int *numTables);
extern void getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables);
extern InhInfo *getInherits(Archive *fout, int *numInherits);
extern void getIndexes(Archive *fout, TableInfo tblinfo[], int numTables);
*************** extern void getConstraints(Archive *fout
*** 544,552 ****
extern RuleInfo *getRules(Archive *fout, int *numRules);
extern void getTriggers(Archive *fout, TableInfo tblinfo[], int numTables);
extern ProcLangInfo *getProcLangs(Archive *fout, int *numProcLangs);
! extern CastInfo *getCasts(Archive *fout, DumpOptions *dopt, int *numCasts);
extern TransformInfo *getTransforms(Archive *fout, int *numTransforms);
! extern void getTableAttrs(Archive *fout, DumpOptions *dopt, TableInfo *tbinfo, int numTables);
extern bool shouldPrintColumn(DumpOptions *dopt, TableInfo *tbinfo, int colno);
extern TSParserInfo *getTSParsers(Archive *fout, int *numTSParsers);
extern TSDictInfo *getTSDictionaries(Archive *fout, int *numTSDicts);
--- 544,552 ----
extern RuleInfo *getRules(Archive *fout, int *numRules);
extern void getTriggers(Archive *fout, TableInfo tblinfo[], int numTables);
extern ProcLangInfo *getProcLangs(Archive *fout, int *numProcLangs);
! extern CastInfo *getCasts(Archive *fout, int *numCasts);
extern TransformInfo *getTransforms(Archive *fout, int *numTransforms);
! extern void getTableAttrs(Archive *fout, TableInfo *tbinfo, int numTables);
extern bool shouldPrintColumn(DumpOptions *dopt, TableInfo *tbinfo, int colno);
extern TSParserInfo *getTSParsers(Archive *fout, int *numTSParsers);
extern TSDictInfo *getTSDictionaries(Archive *fout, int *numTSDicts);
*************** extern FdwInfo *getForeignDataWrappers(A
*** 556,563 ****
int *numForeignDataWrappers);
extern ForeignServerInfo *getForeignServers(Archive *fout,
int *numForeignServers);
! extern DefaultACLInfo *getDefaultACLs(Archive *fout, DumpOptions *dopt, int *numDefaultACLs);
! extern void getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[],
int numExtensions);
extern EventTriggerInfo *getEventTriggers(Archive *fout, int *numEventTriggers);
extern void getPolicies(Archive *fout, TableInfo tblinfo[], int numTables);
--- 556,563 ----
int *numForeignDataWrappers);
extern ForeignServerInfo *getForeignServers(Archive *fout,
int *numForeignServers);
! extern DefaultACLInfo *getDefaultACLs(Archive *fout, int *numDefaultACLs);
! extern void getExtensionMembership(Archive *fout, ExtensionInfo extinfo[],
int numExtensions);
extern EventTriggerInfo *getEventTriggers(Archive *fout, int *numEventTriggers);
extern void getPolicies(Archive *fout, TableInfo tblinfo[], int numTables);
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index af8dff5..1559f1e 100644
*** a/src/bin/pg_dump/pg_restore.c
--- b/src/bin/pg_dump/pg_restore.c
*************** main(int argc, char **argv)
*** 377,382 ****
--- 377,384 ----
AH = OpenArchive(inputFileSpec, opts->format);
+ SetArchiveOptions(AH, NULL, opts);
+
/*
* We don't have a connection yet but that doesn't matter. The connection
* is initialized to NULL and if we terminate through exit_nicely() while
*************** main(int argc, char **argv)
*** 393,399 ****
AH->exit_on_error = opts->exit_on_error;
if (opts->tocFile)
! SortTocFromFile(AH, opts);
/* See comments in pg_dump.c */
#ifdef WIN32
--- 395,401 ----
AH->exit_on_error = opts->exit_on_error;
if (opts->tocFile)
! SortTocFromFile(AH);
/* See comments in pg_dump.c */
#ifdef WIN32
*************** main(int argc, char **argv)
*** 408,417 ****
AH->numWorkers = numWorkers;
if (opts->tocSummary)
! PrintTOCSummary(AH, opts);
else
{
! SetArchiveRestoreOptions(AH, opts);
RestoreArchive(AH);
}
--- 410,419 ----
AH->numWorkers = numWorkers;
if (opts->tocSummary)
! PrintTOCSummary(AH);
else
{
! ProcessArchiveRestoreOptions(AH);
RestoreArchive(AH);
}
*************** main(int argc, char **argv)
*** 423,429 ****
/* AH may be freed in CloseArchive? */
exit_code = AH->n_errors ? 1 : 0;
! CloseArchive(AH, NULL);
return exit_code;
}
--- 425,431 ----
/* AH may be freed in CloseArchive? */
exit_code = AH->n_errors ? 1 : 0;
! CloseArchive(AH);
return exit_code;
}