mirror of
https://github.com/postgres/postgres.git
synced 2025-10-15 05:46:52 +03:00
Non text modes for pg_dumpall, correspondingly change pg_restore
pg_dumpall acquires a new -F/--format option, with the same meanings as pg_dump. The default is p, meaning plain text. For any other value, a directory is created containing two files, globals.data and map.dat. The first contains SQL for restoring the global data, and the second contains a map from oids to database names. It will also contain a subdirectory called databases, inside which it will create archives in the specified format, named using the database oids. In these casess the -f argument is required. If pg_restore encounters a directory containing globals.dat, and no toc.dat, it restores the global settings and then restores each database. pg_restore acquires two new options: -g/--globals-only which suppresses restoration of any databases, and --exclude-database which inhibits restoration of particualr database(s) in the same way the same option works in pg_dumpall. Author: Mahendra Singh Thalor <mahi6run@gmail.com> Co-authored-by: Andrew Dunstan <andrew@dunslane.net> Reviewed-by: jian he <jian.universality@gmail.com> Reviewed-by: Srinath Reddy <srinath2133@gmail.com> Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org> Discussion: https://postgr.es/m/cb103623-8ee6-4ba5-a2c9-f32e3a4933fa@dunslane.net
This commit is contained in:
@@ -85,7 +85,7 @@ static int RestoringToDB(ArchiveHandle *AH);
|
||||
static void dump_lo_buf(ArchiveHandle *AH);
|
||||
static void dumpTimestamp(ArchiveHandle *AH, const char *msg, time_t tim);
|
||||
static void SetOutput(ArchiveHandle *AH, const char *filename,
|
||||
const pg_compress_specification compression_spec);
|
||||
const pg_compress_specification compression_spec, bool append_data);
|
||||
static CompressFileHandle *SaveOutput(ArchiveHandle *AH);
|
||||
static void RestoreOutput(ArchiveHandle *AH, CompressFileHandle *savedOutput);
|
||||
|
||||
@@ -337,9 +337,14 @@ ProcessArchiveRestoreOptions(Archive *AHX)
|
||||
StrictNamesCheck(ropt);
|
||||
}
|
||||
|
||||
/* Public */
|
||||
/*
|
||||
* RestoreArchive
|
||||
*
|
||||
* If append_data is set, then append data into file as we are restoring dump
|
||||
* of multiple databases which was taken by pg_dumpall.
|
||||
*/
|
||||
void
|
||||
RestoreArchive(Archive *AHX)
|
||||
RestoreArchive(Archive *AHX, bool append_data)
|
||||
{
|
||||
ArchiveHandle *AH = (ArchiveHandle *) AHX;
|
||||
RestoreOptions *ropt = AH->public.ropt;
|
||||
@@ -456,7 +461,7 @@ RestoreArchive(Archive *AHX)
|
||||
*/
|
||||
sav = SaveOutput(AH);
|
||||
if (ropt->filename || ropt->compression_spec.algorithm != PG_COMPRESSION_NONE)
|
||||
SetOutput(AH, ropt->filename, ropt->compression_spec);
|
||||
SetOutput(AH, ropt->filename, ropt->compression_spec, append_data);
|
||||
|
||||
ahprintf(AH, "--\n-- PostgreSQL database dump\n--\n\n");
|
||||
|
||||
@@ -1295,7 +1300,7 @@ PrintTOCSummary(Archive *AHX)
|
||||
|
||||
sav = SaveOutput(AH);
|
||||
if (ropt->filename)
|
||||
SetOutput(AH, ropt->filename, out_compression_spec);
|
||||
SetOutput(AH, ropt->filename, out_compression_spec, false);
|
||||
|
||||
if (strftime(stamp_str, sizeof(stamp_str), PGDUMP_STRFTIME_FMT,
|
||||
localtime(&AH->createDate)) == 0)
|
||||
@@ -1674,7 +1679,8 @@ archprintf(Archive *AH, const char *fmt,...)
|
||||
|
||||
static void
|
||||
SetOutput(ArchiveHandle *AH, const char *filename,
|
||||
const pg_compress_specification compression_spec)
|
||||
const pg_compress_specification compression_spec,
|
||||
bool append_data)
|
||||
{
|
||||
CompressFileHandle *CFH;
|
||||
const char *mode;
|
||||
@@ -1694,7 +1700,7 @@ SetOutput(ArchiveHandle *AH, const char *filename,
|
||||
else
|
||||
fn = fileno(stdout);
|
||||
|
||||
if (AH->mode == archModeAppend)
|
||||
if (append_data || AH->mode == archModeAppend)
|
||||
mode = PG_BINARY_A;
|
||||
else
|
||||
mode = PG_BINARY_W;
|
||||
|
Reference in New Issue
Block a user