Обсуждение: ALTER SYSTEM and GUC_LIST_QUOTE

Поиск
Список
Период
Сортировка

ALTER SYSTEM and GUC_LIST_QUOTE

От
Adam Brightwell
Дата:
All,

While testing some behaviors with ALTER SYSTEM I discovered that GUC
parameters with the GUC_LIST_QUOTE flag have a potential issue.

As an example,

ALTER SYSTEM SET shared_preload_libraries = '';

Results in the following output in postgresql.auto.conf:

shared_preload_libraries = '""';

Therefore, when attempting to restart postgres the following error is
encountered:

FATAL:  could not access file "": No such file or directory

As well, specifying multiple items:

ALTER SYSTEM SET shared_preload_libraries = 'foo,bar';

Results in:

shared_preload_libraries = '"foo,bar"';

Which doesn't parse out into separate list items and therefore obviously fails.

I think from an ALTER SYSTEM perspective this is an issue, as I would
expect to be able to set these types of parameters to any valid value,
including an empty list.  I'm willing to accept that there might be
something here that I am missing or not understanding about how this
should work, but this doesn't seem right.

Thoughts?

-Adam

-- 
Adam Brightwell - adam.brightwell@crunchydatasolutions.com
Database Engineer - www.crunchydatasolutions.com



Re: ALTER SYSTEM and GUC_LIST_QUOTE

От
Tom Lane
Дата:
Adam Brightwell <adam.brightwell@crunchydatasolutions.com> writes:
> While testing some behaviors with ALTER SYSTEM I discovered that GUC
> parameters with the GUC_LIST_QUOTE flag have a potential issue.

> As an example,
> ALTER SYSTEM SET shared_preload_libraries = '';
> Results in the following output in postgresql.auto.conf:
> shared_preload_libraries = '""';
> Therefore, when attempting to restart postgres the following error is
> encountered:
> FATAL:  could not access file "": No such file or directory

I think this is correct.  You specified one empty item in the list.

> As well, specifying multiple items:
> ALTER SYSTEM SET shared_preload_libraries = 'foo,bar';
> Results in:
> shared_preload_libraries = '"foo,bar"';

This one is definitely pilot error; you should have said

ALTER SYSTEM SET shared_preload_libraries = foo,bar;
or
ALTER SYSTEM SET shared_preload_libraries = 'foo','bar';

The quotes make it a single item.

There isn't a way to use ALTER SYSTEM SET to set a list variable to
an empty list, but that is true of SET as well, and nobody's ever
complained.  In the ALTER SYSTEM case at least you can use RESET.
        regards, tom lane