> On Tuesday, July 23, 2013 5:26 AM Tom Lane wrote:
> Josh Berkus <josh@agliodbs.com> writes:
> > Christophe just discovered something with include files which is
> going
> > to cause issues with ALTER SYSTEM SET.
>
> > So, take as a hypothetical that you use the default postgresql.conf
> > file, which sets shared_buffers = 32MB.
>
> > Instead of editing this file, you do ALTER SYSTEM SET shared_buffers
> =
> > '1GB', which updates config/postgresql.auto.conf.
>
> > Then you restart PostgreSQL.
>
> > Everything is hunky-dory, until a later occasion where you *reload*
> > postgresql.
>
> Everything was already *not* hunky-dory as soon as you did that, since
> a SIGHUP would have had the same problem.
>
> I'd be inclined to think that ALTER SYSTEM SET should not be allowed to
> modify any PGC_POSTMASTER parameters.
One way to fix the problem is that while parsing if the option already
exists, replace it. Something like below code
ParseConfigFp()
{
..
..
/* replace the option value, if already exists in list */ for (item = *head_p; item != NULL;
item=
item->next) { if (strcmp(item->name, opt_name) == 0)
{ pfree(item->value);
item->value= pstrdup(opt_value); replaced = true;
break; } } if(!replaced)
{ /* ordinary variable, append to list */ item
=palloc(sizeof *item); item->name = opt_name; item->value
=opt_value; item->filename = pstrdup(config_file);
item->sourceline= ConfigFileLineno-1; item->next = NULL;
if(*head_p == NULL) *head_p = item; else
(*tail_p)->next = item; *tail_p = item;
}
..
..
}
There is overhead of traversing the list each time, but as this path is
traversed in less and non-performance critical operations, it can be
considered to fix the problem.
If you consider above as a non-trivial or not a right way to fix the
problem,
then I can update the patch to disallow PGC_POSTMASTER parameters by ALTER
SYSTEM SET command.
With Regards,
Amit Kapila.