Simplify the pg_dump/pg_restore error reporting macros, and allow
pg_dumpall to use the same memory allocation functions as the others.
This commit is contained in:
parent
b60f37bf44
commit
8b08deb0d1
@ -35,8 +35,8 @@ pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(KEYWRDOBJS) | submake-libpq
|
|||||||
pg_restore: pg_restore.o $(OBJS) $(KEYWRDOBJS) | submake-libpq submake-libpgport
|
pg_restore: pg_restore.o $(OBJS) $(KEYWRDOBJS) | submake-libpq submake-libpgport
|
||||||
$(CC) $(CFLAGS) pg_restore.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
|
$(CC) $(CFLAGS) pg_restore.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
|
||||||
|
|
||||||
pg_dumpall: pg_dumpall.o dumputils.o $(KEYWRDOBJS) | submake-libpq submake-libpgport
|
pg_dumpall: pg_dumpall.o dumputils.o dumpmem.o $(KEYWRDOBJS) | submake-libpq submake-libpgport
|
||||||
$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
|
$(CC) $(CFLAGS) pg_dumpall.o dumputils.o dumpmem.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
|
||||||
|
|
||||||
install: all installdirs
|
install: all installdirs
|
||||||
$(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X)
|
$(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X)
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
#include "pg_backup.h"
|
#include "dumputils.h"
|
||||||
#include "dumpmem.h"
|
#include "dumpmem.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -32,10 +32,10 @@ pg_strdup(const char *string)
|
|||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
if (!string)
|
if (!string)
|
||||||
exit_horribly(NULL, NULL, "cannot duplicate null pointer\n");
|
exit_horribly(NULL, "cannot duplicate null pointer\n");
|
||||||
tmp = strdup(string);
|
tmp = strdup(string);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
exit_horribly(NULL, NULL, "out of memory\n");
|
exit_horribly(NULL, "out of memory\n");
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ pg_malloc(size_t size)
|
|||||||
|
|
||||||
tmp = malloc(size);
|
tmp = malloc(size);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
exit_horribly(NULL, NULL, "out of memory\n");
|
exit_horribly(NULL, "out of memory\n");
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ pg_calloc(size_t nmemb, size_t size)
|
|||||||
|
|
||||||
tmp = calloc(nmemb, size);
|
tmp = calloc(nmemb, size);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
exit_horribly(NULL, NULL, _("out of memory\n"));
|
exit_horribly(NULL, _("out of memory\n"));
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +68,6 @@ pg_realloc(void *ptr, size_t size)
|
|||||||
|
|
||||||
tmp = realloc(ptr, size);
|
tmp = realloc(ptr, size);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
exit_horribly(NULL, NULL, _("out of memory\n"));
|
exit_horribly(NULL, _("out of memory\n"));
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
|
|
||||||
int quote_all_identifiers = 0;
|
int quote_all_identifiers = 0;
|
||||||
|
const char *progname;
|
||||||
|
|
||||||
|
|
||||||
#define supports_grant_options(version) ((version) >= 70400)
|
#define supports_grant_options(version) ((version) >= 70400)
|
||||||
@ -1211,3 +1212,33 @@ emitShSecLabels(PGconn *conn, PGresult *res, PQExpBuffer buffer,
|
|||||||
appendPQExpBuffer(buffer, ";\n");
|
appendPQExpBuffer(buffer, ";\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
write_msg(const char *modulename, const char *fmt,...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
if (modulename)
|
||||||
|
fprintf(stderr, "%s: [%s] ", progname, _(modulename));
|
||||||
|
else
|
||||||
|
fprintf(stderr, "%s: ", progname);
|
||||||
|
vfprintf(stderr, _(fmt), ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
exit_horribly(const char *modulename, const char *fmt,...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
write_msg(modulename, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,5 +51,9 @@ extern void buildShSecLabelQuery(PGconn *conn, const char *catalog_name,
|
|||||||
uint32 objectId, PQExpBuffer sql);
|
uint32 objectId, PQExpBuffer sql);
|
||||||
extern void emitShSecLabels(PGconn *conn, PGresult *res,
|
extern void emitShSecLabels(PGconn *conn, PGresult *res,
|
||||||
PQExpBuffer buffer, const char *target, const char *objname);
|
PQExpBuffer buffer, const char *target, const char *objname);
|
||||||
|
extern void write_msg(const char *modulename, const char *fmt,...)
|
||||||
|
__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3)));
|
||||||
|
extern void exit_horribly(const char *modulename, const char *fmt,...)
|
||||||
|
__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3)));
|
||||||
|
|
||||||
#endif /* DUMPUTILS_H */
|
#endif /* DUMPUTILS_H */
|
||||||
|
@ -150,10 +150,6 @@ typedef struct _restoreOptions
|
|||||||
* Main archiver interface.
|
* Main archiver interface.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void
|
|
||||||
exit_horribly(Archive *AH, const char *modulename, const char *fmt,...)
|
|
||||||
__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4)));
|
|
||||||
|
|
||||||
|
|
||||||
/* Lets the archive know we have a DB connection to shutdown if it dies */
|
/* Lets the archive know we have a DB connection to shutdown if it dies */
|
||||||
|
|
||||||
|
@ -84,8 +84,6 @@ typedef struct _outputContext
|
|||||||
int gzOut;
|
int gzOut;
|
||||||
} OutputContext;
|
} OutputContext;
|
||||||
|
|
||||||
const char *progname;
|
|
||||||
|
|
||||||
static const char *modulename = gettext_noop("archiver");
|
static const char *modulename = gettext_noop("archiver");
|
||||||
|
|
||||||
/* index array created by fix_dependencies -- only used in parallel restore */
|
/* index array created by fix_dependencies -- only used in parallel restore */
|
||||||
@ -120,7 +118,6 @@ static int _discoverArchiveFormat(ArchiveHandle *AH);
|
|||||||
|
|
||||||
static int RestoringToDB(ArchiveHandle *AH);
|
static int RestoringToDB(ArchiveHandle *AH);
|
||||||
static void dump_lo_buf(ArchiveHandle *AH);
|
static void dump_lo_buf(ArchiveHandle *AH);
|
||||||
static void _write_msg(const char *modulename, const char *fmt, va_list ap) __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 0)));
|
|
||||||
static void _die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0)));
|
static void _die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0)));
|
||||||
|
|
||||||
static void dumpTimestamp(ArchiveHandle *AH, const char *msg, time_t tim);
|
static void dumpTimestamp(ArchiveHandle *AH, const char *msg, time_t tim);
|
||||||
@ -1302,7 +1299,7 @@ ahlog(ArchiveHandle *AH, int level, const char *fmt,...)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
_write_msg(NULL, fmt, ap);
|
write_msg(NULL, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1420,32 +1417,11 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Common exit code */
|
|
||||||
static void
|
|
||||||
_write_msg(const char *modulename, const char *fmt, va_list ap)
|
|
||||||
{
|
|
||||||
if (modulename)
|
|
||||||
fprintf(stderr, "%s: [%s] ", progname, _(modulename));
|
|
||||||
else
|
|
||||||
fprintf(stderr, "%s: ", progname);
|
|
||||||
vfprintf(stderr, _(fmt), ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
write_msg(const char *modulename, const char *fmt,...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
_write_msg(modulename, fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap)
|
_die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
_write_msg(modulename, fmt, ap);
|
write_msg(modulename, fmt, ap);
|
||||||
|
|
||||||
if (AH)
|
if (AH)
|
||||||
{
|
{
|
||||||
@ -1458,17 +1434,6 @@ _die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_lis
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* External use */
|
|
||||||
void
|
|
||||||
exit_horribly(Archive *AH, const char *modulename, const char *fmt,...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
_die_horribly((ArchiveHandle *) AH, modulename, fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Archiver use (just different arg declaration) */
|
/* Archiver use (just different arg declaration) */
|
||||||
void
|
void
|
||||||
die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...)
|
die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...)
|
||||||
@ -1524,7 +1489,7 @@ warn_or_die_horribly(ArchiveHandle *AH,
|
|||||||
_die_horribly(AH, modulename, fmt, ap);
|
_die_horribly(AH, modulename, fmt, ap);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_write_msg(modulename, fmt, ap);
|
write_msg(modulename, fmt, ap);
|
||||||
AH->public.n_errors++;
|
AH->public.n_errors++;
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
@ -303,7 +303,6 @@ extern const char *progname;
|
|||||||
|
|
||||||
extern void die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4)));
|
extern void die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4)));
|
||||||
extern void warn_or_die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4)));
|
extern void warn_or_die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 4)));
|
||||||
extern void write_msg(const char *modulename, const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3)));
|
|
||||||
|
|
||||||
extern void WriteTOC(ArchiveHandle *AH);
|
extern void WriteTOC(ArchiveHandle *AH);
|
||||||
extern void ReadTOC(ArchiveHandle *AH);
|
extern void ReadTOC(ArchiveHandle *AH);
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "compress_io.h"
|
#include "compress_io.h"
|
||||||
|
#include "dumputils.h"
|
||||||
#include "dumpmem.h"
|
#include "dumpmem.h"
|
||||||
|
|
||||||
/*--------
|
/*--------
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pg_backup_archiver.h"
|
#include "pg_backup_archiver.h"
|
||||||
|
#include "dumputils.h"
|
||||||
#include "dumpmem.h"
|
#include "dumpmem.h"
|
||||||
|
|
||||||
static void _ArchiveEntry(ArchiveHandle *AH, TocEntry *te);
|
static void _ArchiveEntry(ArchiveHandle *AH, TocEntry *te);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include "pg_backup_archiver.h"
|
#include "pg_backup_archiver.h"
|
||||||
|
#include "dumputils.h"
|
||||||
#include "dumpmem.h"
|
#include "dumpmem.h"
|
||||||
|
|
||||||
static const char *modulename = gettext_noop("sorter");
|
static const char *modulename = gettext_noop("sorter");
|
||||||
@ -315,13 +316,13 @@ TopoSort(DumpableObject **objs,
|
|||||||
obj = objs[i];
|
obj = objs[i];
|
||||||
j = obj->dumpId;
|
j = obj->dumpId;
|
||||||
if (j <= 0 || j > maxDumpId)
|
if (j <= 0 || j > maxDumpId)
|
||||||
exit_horribly(NULL, modulename, "invalid dumpId %d\n", j);
|
exit_horribly(modulename, "invalid dumpId %d\n", j);
|
||||||
idMap[j] = i;
|
idMap[j] = i;
|
||||||
for (j = 0; j < obj->nDeps; j++)
|
for (j = 0; j < obj->nDeps; j++)
|
||||||
{
|
{
|
||||||
k = obj->dependencies[j];
|
k = obj->dependencies[j];
|
||||||
if (k <= 0 || k > maxDumpId)
|
if (k <= 0 || k > maxDumpId)
|
||||||
exit_horribly(NULL, modulename, "invalid dependency %d\n", k);
|
exit_horribly(modulename, "invalid dependency %d\n", k);
|
||||||
beforeConstraints[k]++;
|
beforeConstraints[k]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -541,7 +542,7 @@ findDependencyLoops(DumpableObject **objs, int nObjs, int totObjs)
|
|||||||
|
|
||||||
/* We'd better have fixed at least one loop */
|
/* We'd better have fixed at least one loop */
|
||||||
if (!fixedloop)
|
if (!fixedloop)
|
||||||
exit_horribly(NULL, modulename, "could not identify dependency loop\n");
|
exit_horribly(modulename, "could not identify dependency loop\n");
|
||||||
|
|
||||||
free(workspace);
|
free(workspace);
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "getopt_long.h"
|
#include "getopt_long.h"
|
||||||
|
|
||||||
#include "dumputils.h"
|
#include "dumputils.h"
|
||||||
|
#include "dumpmem.h"
|
||||||
#include "pg_backup.h"
|
#include "pg_backup.h"
|
||||||
|
|
||||||
/* version string we expect back from pg_dump */
|
/* version string we expect back from pg_dump */
|
||||||
@ -1908,41 +1909,3 @@ doShellQuoting(PQExpBuffer buf, const char *str)
|
|||||||
appendPQExpBufferChar(buf, '"');
|
appendPQExpBufferChar(buf, '"');
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Simpler versions of common.c functions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *
|
|
||||||
pg_strdup(const char *string)
|
|
||||||
{
|
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
if (!string)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "cannot duplicate null pointer\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
tmp = strdup(string);
|
|
||||||
if (!tmp)
|
|
||||||
{
|
|
||||||
fprintf(stderr, _("%s: out of memory\n"), progname);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
pg_malloc(size_t size)
|
|
||||||
{
|
|
||||||
void *tmp;
|
|
||||||
|
|
||||||
tmp = malloc(size);
|
|
||||||
if (!tmp)
|
|
||||||
{
|
|
||||||
fprintf(stderr, _("%s: out of memory\n"), progname);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
@ -355,6 +355,7 @@ sub mkvcbuild
|
|||||||
$pgdumpall->AddIncludeDir('src\backend');
|
$pgdumpall->AddIncludeDir('src\backend');
|
||||||
$pgdumpall->AddFile('src\bin\pg_dump\pg_dumpall.c');
|
$pgdumpall->AddFile('src\bin\pg_dump\pg_dumpall.c');
|
||||||
$pgdumpall->AddFile('src\bin\pg_dump\dumputils.c');
|
$pgdumpall->AddFile('src\bin\pg_dump\dumputils.c');
|
||||||
|
$pgdumpall->AddFile('src\bin\pg_dump\dumpmem.c');
|
||||||
$pgdumpall->AddFile('src\bin\pg_dump\keywords.c');
|
$pgdumpall->AddFile('src\bin\pg_dump\keywords.c');
|
||||||
$pgdumpall->AddFile('src\backend\parser\kwlookup.c');
|
$pgdumpall->AddFile('src\backend\parser\kwlookup.c');
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user