diff --git a/src/bin/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c index 51fc7aede0..1663bcc3a2 100644 --- a/src/bin/pg_upgrade/option.c +++ b/src/bin/pg_upgrade/option.c @@ -63,6 +63,7 @@ parseCommandLine(int argc, char *argv[]) int option; /* Command line option */ int optindex = 0; /* used by getopt_long */ int os_user_effective_id; + int opt_num_transfer_mode = 0; user_opts.do_sync = true; user_opts.transfer_mode = TRANSFER_MODE_COPY; @@ -131,6 +132,7 @@ parseCommandLine(int argc, char *argv[]) case 'k': user_opts.transfer_mode = TRANSFER_MODE_LINK; + opt_num_transfer_mode++; break; case 'N': @@ -193,10 +195,12 @@ parseCommandLine(int argc, char *argv[]) case 1: user_opts.transfer_mode = TRANSFER_MODE_CLONE; + opt_num_transfer_mode++; break; case 2: user_opts.transfer_mode = TRANSFER_MODE_COPY; + opt_num_transfer_mode++; break; default: @@ -209,6 +213,9 @@ parseCommandLine(int argc, char *argv[]) if (optind < argc) pg_fatal("too many command-line arguments (first is \"%s\")", argv[optind]); + if (opt_num_transfer_mode > 1) + pg_fatal("Only one transfer mode can be specified."); + if (log_opts.verbose) pg_log(PG_REPORT, "Running in verbose mode");