Excellent, thanks!

On Sat, Jul 11, 2020 at 8:43 PM Tom Lane <t...@sss.pgh.pa.us> wrote:

> =?UTF-8?B?SmFrYSBKYW7EjWFy?= <j...@kubje.org> writes:
> > I wrote a Postgres client and in it I allow the user to specify arbitrary
> > StartupMessage parameters (Map<string,string>). This is convenient
> because
> > the user can for example set search_path without issuing a separate SET
> > query or encoding things into the "options" parameter. The protocol
> > documentation also says that the latter is deprecated and what I'm doing
> > (if I understand it right) is preferred.
>
> Sure.
>
> > A fellow author of a driver for a different language reminds me that
> libpq
> > explicitly enumerates the supported parameters in the docs, and I checked
> > the code, and indeed there is a whitelist and others are rejected.
>
> Not sure what you're looking at, but the issue for libpq is that the set
> of "options" that it accepts in connection strings is independent of the
> set of backend GUC names (and relatively few of them actually correspond
> directly to backend GUCs, either).  I suppose we could make it pass
> through unrecognized options, but that would be an unmaintainable mess,
> because both sets of names are constantly evolving.
>
> It's a bit of a hack that the backend accepts GUC names directly in
> startup messages, but the set of "fixed" parameter names in that context
> is very short and has barely changed in decades, so we haven't had
> conflict problems.
>
> > technically, he's correct: it's nowhere documented that sending e.g.
> > search_path in StartupMessage parameters will work, and for that matter
> > whether everything that you can set using SET you can also send there.
>
> protocol.sgml saith (under Message Formats)
>
>     In addition to the above, other parameters may be listed. Parameter
>     names beginning with _pq_. are reserved for use as protocol
>     extensions, while others are treated as run-time parameters to be set
>     at backend start time. Such settings will be applied during backend
>     start (after parsing the command-line arguments if any) and will act
>     as session defaults.
>
> Admittedly, that doesn't directly define what it means by "run-time
> parameter", but what it means is any settable GUC.
>
>                         regards, tom lane
>

Reply via email to