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);