On Tue, Mar 4, 2014 at 04:52:56PM +0100, Pavel Raiskup wrote: > Hello, > > RFE: Consider that you want to run pg_upgrade via some script with some > default '-o' option. But then you also want to give the script's user a > chance to specify the old-server's options according user's needs. > Then something like the following is not possible: > > $ cat script > ... > pg_upgrade ... -o 'sth' $PG_UPGRADE_OPT ... > ... > > I know that this problem is still script-able, but the fix should be > innocent and it would simplify things. Thanks for considering,
Attached is a patch that makes multiple -o options append their arguments for pg_upgrade and pg_ctl, and documents this and the append behavior of postmaster/postgres. This covers all the -o behaviors. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + Everyone has their own god. +
diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c new file mode 100644 index bb594dd..cfc88ec *** a/contrib/pg_upgrade/option.c --- b/contrib/pg_upgrade/option.c *************** parseCommandLine(int argc, char *argv[]) *** 137,153 **** break; case 'o': ! old_cluster.pgopts = pg_strdup(optarg); break; case 'O': ! new_cluster.pgopts = pg_strdup(optarg); break; /* * Someday, the port number option could be removed and passed * using -o/-O, but that requires postmaster -C to be ! * supported on all old/new versions. */ case 'p': if ((old_cluster.port = atoi(optarg)) <= 0) --- 137,171 ---- break; case 'o': ! /* append option? */ ! if (!old_cluster.pgopts) ! old_cluster.pgopts = pg_strdup(optarg); ! else ! { ! char *old_pgopts = old_cluster.pgopts; ! ! old_cluster.pgopts = psprintf("%s %s", old_pgopts, optarg); ! free(old_pgopts); ! } break; case 'O': ! /* append option? */ ! if (!new_cluster.pgopts) ! new_cluster.pgopts = pg_strdup(optarg); ! else ! { ! char *new_pgopts = new_cluster.pgopts; ! ! new_cluster.pgopts = psprintf("%s %s", new_pgopts, optarg); ! free(new_pgopts); ! } break; /* * Someday, the port number option could be removed and passed * using -o/-O, but that requires postmaster -C to be ! * supported on all old/new versions (added in PG 9.2). */ case 'p': if ((old_cluster.port = atoi(optarg)) <= 0) diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml new file mode 100644 index b79f0db..dd57c5c *** a/doc/src/sgml/pgupgrade.sgml --- b/doc/src/sgml/pgupgrade.sgml *************** *** 130,143 **** <term><option>-o</option> <replaceable class="parameter">options</replaceable></term> <term><option>--old-options</option> <replaceable class="parameter">options</replaceable></term> <listitem><para>options to be passed directly to the ! old <command>postgres</command> command</para></listitem> </varlistentry> <varlistentry> <term><option>-O</option> <replaceable class="parameter">options</replaceable></term> <term><option>--new-options</option> <replaceable class="parameter">options</replaceable></term> <listitem><para>options to be passed directly to the ! new <command>postgres</command> command</para></listitem> </varlistentry> <varlistentry> --- 130,145 ---- <term><option>-o</option> <replaceable class="parameter">options</replaceable></term> <term><option>--old-options</option> <replaceable class="parameter">options</replaceable></term> <listitem><para>options to be passed directly to the ! old <command>postgres</command> command; multiple ! option invocations are appended</para></listitem> </varlistentry> <varlistentry> <term><option>-O</option> <replaceable class="parameter">options</replaceable></term> <term><option>--new-options</option> <replaceable class="parameter">options</replaceable></term> <listitem><para>options to be passed directly to the ! new <command>postgres</command> command; multiple ! option invocations are appended</para></listitem> </varlistentry> <varlistentry> diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml new file mode 100644 index 2368129..29f882b *** a/doc/src/sgml/ref/pg_ctl-ref.sgml --- b/doc/src/sgml/ref/pg_ctl-ref.sgml *************** PostgreSQL documentation *** 302,308 **** <listitem> <para> Specifies options to be passed directly to the ! <command>postgres</command> command. </para> <para> The options should usually be surrounded by single or double --- 302,309 ---- <listitem> <para> Specifies options to be passed directly to the ! <command>postgres</command> command; multiple ! option invocations are appended. </para> <para> The options should usually be surrounded by single or double diff --git a/doc/src/sgml/ref/postgres-ref.sgml b/doc/src/sgml/ref/postgres-ref.sgml new file mode 100644 index cdfdaa0..845d969 *** a/doc/src/sgml/ref/postgres-ref.sgml --- b/doc/src/sgml/ref/postgres-ref.sgml *************** PostgreSQL documentation *** 288,294 **** class="parameter">extra-options</replaceable> are passed to all server processes started by this <command>postgres</command> process. If the option string contains ! any spaces, the entire string must be quoted. </para> <para> --- 288,295 ---- class="parameter">extra-options</replaceable> are passed to all server processes started by this <command>postgres</command> process. If the option string contains ! any spaces, the entire string must be quoted; multiple ! option invocations are appended. </para> <para> diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c new file mode 100644 index ad7f36c..a46ca53 *** a/src/bin/pg_ctl/pg_ctl.c --- b/src/bin/pg_ctl/pg_ctl.c *************** main(int argc, char **argv) *** 2184,2190 **** register_servicename = pg_strdup(optarg); break; case 'o': ! post_opts = pg_strdup(optarg); break; case 'p': exec_path = pg_strdup(optarg); --- 2184,2199 ---- register_servicename = pg_strdup(optarg); break; case 'o': ! /* append option? */ ! if (!post_opts) ! post_opts = pg_strdup(optarg); ! else ! { ! char *old_post_opts = post_opts; ! ! post_opts = psprintf("%s %s", old_post_opts, optarg); ! free(old_post_opts); ! } break; case 'p': exec_path = pg_strdup(optarg);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers