diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index b5533cdb9fb..de6b3ad86bf 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1016,10 +1016,13 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname options - Adds command-line options to send to the server at run-time. - For example, setting this to -c geqo=off sets the + Specifies command-line options to send to the server at connection + start. For example, setting this to -c geqo=off sets the session's value of the geqo parameter to - off. For a detailed discussion of the available + off. Spaces within this string are considered to + separate command-line arguments, unless escaped with a backslash + (\); write \\ to represent a literal + backslash. For a detailed discussion of the available options, consult . diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index c7df697845e..42e94971741 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -4739,7 +4739,10 @@ StartupMessage (F) Command-line arguments for the backend. (This is deprecated in favor of setting individual run-time - parameters.) + parameters.) Spaces within this string are + considered to separate arguments, unless escaped with + a backslash (\); write \\ to + represent a literal backslash. @@ -4748,11 +4751,8 @@ StartupMessage (F) In addition to the above, any run-time parameter that can be set at backend start time might be listed. Such settings will be applied during backend start (after parsing the - command-line options if any). The values will act as - session defaults. Spaces in option values need to be escaped - with a backslash (\). A literal backslash can be - passed by escaping it with another backslash - (i.e \\). + command-line arguments if any). The values will act as + session defaults. diff --git a/doc/src/sgml/ref/postgres-ref.sgml b/doc/src/sgml/ref/postgres-ref.sgml index 3b5617181ca..e2e99092428 100644 --- a/doc/src/sgml/ref/postgres-ref.sgml +++ b/doc/src/sgml/ref/postgres-ref.sgml @@ -284,12 +284,18 @@ PostgreSQL documentation - The command-line-style options specified in extra-options are passed to all server processes started by this - postgres process. If the option string contains - any spaces, the entire string must be quoted; multiple - option invocations are appended. + postgres process. + + + + Spaces within extra-options are + considered to separate arguments, unless escaped with a backslash + (\); write \\ to represent a literal + backslash. Multiple arguments can also be specified via multiple + uses of diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 0e7b5fad2dd..063b0653b49 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -418,7 +418,7 @@ InitCommunication(void) * backslashes, with \\ representing a literal backslash. */ void -pg_split_opts(char **argv, int *argcp, char *optstr) +pg_split_opts(char **argv, int *argcp, const char *optstr) { StringInfoData s; @@ -438,8 +438,8 @@ pg_split_opts(char **argv, int *argcp, char *optstr) break; /* - * Parse a single option + value, stopping at the first space, unless - * it's escaped. + * Parse a single option, stopping at the first space, unless it's + * escaped. */ while (*optstr) { @@ -457,10 +457,11 @@ pg_split_opts(char **argv, int *argcp, char *optstr) optstr++; } - /* now store the option */ + /* now store the option in the next argv[] position */ argv[(*argcp)++] = pstrdup(s.data); } - resetStringInfo(&s); + + pfree(s.data); } /* diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 71aa505e17d..b5391673609 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -408,7 +408,7 @@ extern AuxProcType MyAuxProcType; *****************************************************************************/ /* in utils/init/postinit.c */ -extern void pg_split_opts(char **argv, int *argcp, char *optstr); +extern void pg_split_opts(char **argv, int *argcp, const char *optstr); extern void InitializeMaxBackends(void); extern void InitPostgres(const char *in_dbname, Oid dboid, const char *username, Oid useroid, char *out_dbname);