summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2019-11-04 15:50:57 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2019-11-05 09:57:36 -0300
commit12a51e2ebea7c90eb5a676f761f81f0ec7f68a50 (patch)
treeaf1f2527917097a62c60aed40303e35458566e78
parent648f17879e61e9faa007eab56331afe77b696c1e (diff)
Change pg_restore -f- to dump to stdout instead of to ./-
Starting with PostgreSQL 12, pg_restore refuses to run when neither -d nor -f are specified (c.f. commit 413ccaa74d9a), and it also makes "-f -" mean the old implicit behavior of dumping to stdout. However, older branches write to a file called ./- when invoked like that, making it impossible to write pg_restore scripts that work across versions. This is a partial backpatch of the aforementioned commit to all older supported branches, providing an upgrade path. Discussion: https://postgr.es/m/20191006190839.GE18030@telsasoft.com
-rw-r--r--doc/src/sgml/ref/pg_restore.sgml4
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c7
-rw-r--r--src/bin/pg_dump/pg_restore.c2
3 files changed, 9 insertions, 4 deletions
diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml
index ef5bab40d1d..787d960a503 100644
--- a/doc/src/sgml/ref/pg_restore.sgml
+++ b/doc/src/sgml/ref/pg_restore.sgml
@@ -165,8 +165,8 @@
<listitem>
<para>
Specify output file for generated script, or for the listing
- when used with <option>-l</option>. Default is the standard
- output.
+ when used with <option>-l</option>. Use <literal>-</literal>
+ for the standard output, which is also the default.
</para>
</listitem>
</varlistentry>
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index e8600cfc38c..51af3fcd69c 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -1513,7 +1513,12 @@ SetOutput(ArchiveHandle *AH, const char *filename, int compression)
int fn;
if (filename)
- fn = -1;
+ {
+ if (strcmp(filename, "-") == 0)
+ fn = fileno(stdout);
+ else
+ fn = -1;
+ }
else if (AH->FH)
fn = fileno(AH->FH);
else if (AH->fSpec)
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 41137a1b7d0..cf06c484e74 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -445,7 +445,7 @@ usage(const char *progname)
printf(_("\nGeneral options:\n"));
printf(_(" -d, --dbname=NAME connect to database name\n"));
- printf(_(" -f, --file=FILENAME output file name\n"));
+ printf(_(" -f, --file=FILENAME output file name (- for stdout)\n"));
printf(_(" -F, --format=c|d|t backup file format (should be automatic)\n"));
printf(_(" -l, --list print summarized TOC of the archive\n"));
printf(_(" -v, --verbose verbose mode\n"));