From d03d959bf57e2244f2263c3ec1d71a3c8fd182ff Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <daniel@yesql.se>
Date: Sat, 27 Oct 2018 22:41:53 +0200
Subject: [PATCH] Consolidate option checking in pg_restore

Move the check for conflicting options from the archive restore code
to the main function where other similar checks are performed.  Also
reword the error message to be in line with other messages.
---
 src/bin/pg_dump/pg_backup_archiver.c |  9 ---------
 src/bin/pg_dump/pg_restore.c         | 11 +++++++++++
 src/bin/pg_dump/t/001_basic.pl       |  8 +++++++-
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index e976def42a..defa8a41b7 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -358,15 +358,6 @@ RestoreArchive(Archive *AHX)
 
 	AH->stage = STAGE_INITIALIZING;
 
-	/*
-	 * Check for nonsensical option combinations.
-	 *
-	 * -C is not compatible with -1, because we can't create a database inside
-	 * a transaction block.
-	 */
-	if (ropt->createDB && ropt->single_txn)
-		exit_horribly(modulename, "-C and -1 are incompatible options\n");
-
 	/*
 	 * If we're going to do parallel restore, there are some restrictions.
 	 */
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 501d7cea72..58b36b6bf7 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -331,6 +331,17 @@ main(int argc, char **argv)
 		exit_nicely(1);
 	}
 
+	/*
+	 * -C is not compatible with -1, because we can't create a database inside
+	 * a transaction block.
+	 */
+	if (opts->createDB && opts->single_txn)
+	{
+		fprintf(stderr, _("%s: options -C/--create and -1/--single-transaction cannot be used together\n"),
+				progname);
+		exit_nicely(1);
+	}
+
 	if (numWorkers <= 0)
 	{
 		fprintf(stderr, _("%s: invalid number of parallel jobs\n"), progname);
diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl
index 17edf444b2..de00dbca39 100644
--- a/src/bin/pg_dump/t/001_basic.pl
+++ b/src/bin/pg_dump/t/001_basic.pl
@@ -4,7 +4,7 @@ use warnings;
 use Config;
 use PostgresNode;
 use TestLib;
-use Test::More tests => 70;
+use Test::More tests => 72;
 
 my $tempdir       = TestLib::tempdir;
 my $tempdir_short = TestLib::tempdir_short;
@@ -150,3 +150,9 @@ command_fails_like(
 	[ 'pg_dumpall', '--if-exists' ],
 	qr/\Qpg_dumpall: option --if-exists requires option -c\/--clean\E/,
 	'pg_dumpall: option --if-exists requires option -c/--clean');
+
+command_fails_like(
+	[ 'pg_restore', '-C', '-1' ],
+	qr/\Qpg_restore: options -C\/--create and -1\/--single-transaction cannot be used together\E/,
+	'pg_restore: options -C\/--create and -1\/--single-transaction cannot be used together'
+);
-- 
2.14.1.145.gb3622a4ee

