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
index 725acb192c999a6412db397ceddd8d75abb35c6c..eda1b8bc6561d41fe7acb73e277d9df15e5b09c4 100644 (file)
<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>
index 01b4af64f612090e43a758f00ed03d3cd8481685..1ebbe852bccb8e097951fce7f371d337dc596b2b 100644 (file)
@@ -1511,7 +1511,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)
index 34d93ab472b0378641334d2baffb3abf84f03823..f5df4e63d7ed0079dab8fedfeb3be3b758e0e868 100644 (file)
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"));