> On Tuesday, July 23, 2013 5:26 AM Tom Lane wrote:
> Josh Berkus <j...@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.



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to