mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Allow the postmaster to accept changes in PGC_BACKEND GUC variables
from the config file, so that these changes will propagate to backends started later. Already-started backends continue to ignore changes in these variables.
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
* Support for grand unified configuration scheme, including SET
|
||||
* command, configuration file, and command line options.
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.54 2001/09/30 18:57:45 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.55 2001/09/30 20:16:21 tgl Exp $
|
||||
*
|
||||
* Copyright 2000 by PostgreSQL Global Development Group
|
||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||
@ -704,37 +704,49 @@ set_config_option(const char *name, const char *value,
|
||||
* precise rules. Note that we don't want to throw errors if we're in
|
||||
* the SIGHUP context. In that case we just ignore the attempt.
|
||||
*/
|
||||
if (record->context == PGC_POSTMASTER && context != PGC_POSTMASTER)
|
||||
switch (record->context)
|
||||
{
|
||||
if (context != PGC_SIGHUP)
|
||||
elog(ERROR, "'%s' cannot be changed after server start", name);
|
||||
else
|
||||
return true;
|
||||
case PGC_POSTMASTER:
|
||||
if (context == PGC_SIGHUP)
|
||||
return true;
|
||||
if (context != PGC_POSTMASTER)
|
||||
elog(ERROR, "'%s' cannot be changed after server start", name);
|
||||
break;
|
||||
case PGC_SIGHUP:
|
||||
if (context != PGC_SIGHUP && context != PGC_POSTMASTER)
|
||||
elog(ERROR, "'%s' cannot be changed now", name);
|
||||
/*
|
||||
* Hmm, the idea of the SIGHUP context is "ought to be global, but
|
||||
* can be changed after postmaster start". But there's nothing
|
||||
* that prevents a crafty administrator from sending SIGHUP
|
||||
* signals to individual backends only.
|
||||
*/
|
||||
break;
|
||||
case PGC_BACKEND:
|
||||
if (context == PGC_SIGHUP)
|
||||
{
|
||||
/*
|
||||
* If a PGC_BACKEND parameter is changed in the config file,
|
||||
* we want to accept the new value in the postmaster (whence
|
||||
* it will propagate to subsequently-started backends), but
|
||||
* ignore it in existing backends. This is a tad klugy, but
|
||||
* necessary because we don't re-read the config file during
|
||||
* backend start.
|
||||
*/
|
||||
if (IsUnderPostmaster)
|
||||
return true;
|
||||
}
|
||||
else if (context != PGC_BACKEND && context != PGC_POSTMASTER)
|
||||
elog(ERROR, "'%s' cannot be set after connection start", name);
|
||||
break;
|
||||
case PGC_SUSET:
|
||||
if (context == PGC_USERSET || context == PGC_BACKEND)
|
||||
elog(ERROR, "permission denied");
|
||||
break;
|
||||
case PGC_USERSET:
|
||||
/* always okay */
|
||||
break;
|
||||
}
|
||||
else if (record->context == PGC_SIGHUP && context != PGC_SIGHUP &&
|
||||
context != PGC_POSTMASTER)
|
||||
{
|
||||
elog(ERROR, "'%s' cannot be changed now", name);
|
||||
|
||||
/*
|
||||
* Hmm, the idea of the SIGHUP context is "ought to be global, but
|
||||
* can be changed after postmaster start". But there's nothing
|
||||
* that prevents a crafty administrator from sending SIGHUP
|
||||
* signals to individual backends only.
|
||||
*/
|
||||
}
|
||||
else if (record->context == PGC_BACKEND && context != PGC_BACKEND
|
||||
&& context != PGC_POSTMASTER)
|
||||
{
|
||||
if (context != PGC_SIGHUP)
|
||||
elog(ERROR, "'%s' cannot be set after connection start", name);
|
||||
else
|
||||
return true;
|
||||
}
|
||||
else if (record->context == PGC_SUSET &&
|
||||
(context == PGC_USERSET || context == PGC_BACKEND))
|
||||
elog(ERROR, "permission denied");
|
||||
|
||||
|
||||
/*
|
||||
* Evaluate value and set variable
|
||||
|
@ -4,7 +4,7 @@
|
||||
* External declarations pertaining to backend/utils/misc/guc.c and
|
||||
* backend/utils/misc/guc-file.l
|
||||
*
|
||||
* $Id: guc.h,v 1.9 2001/06/18 16:14:43 momjian Exp $
|
||||
* $Id: guc.h,v 1.10 2001/09/30 20:16:21 tgl Exp $
|
||||
*/
|
||||
#ifndef GUC_H
|
||||
#define GUC_H
|
||||
@ -23,11 +23,12 @@
|
||||
* certain point in their main loop. It's safer to wait than to read a
|
||||
* file asynchronously.)
|
||||
*
|
||||
* BACKEND options can only be set at postmaster startup or with the
|
||||
* PGOPTIONS variable from the client when the connection is
|
||||
* initiated. Note that you cannot change this kind of option using
|
||||
* the SIGHUP mechanism, that would defeat the purpose of this being
|
||||
* fixed for a given backend once started.
|
||||
* BACKEND options can only be set at postmaster startup, from the
|
||||
* configuration file, or with the PGOPTIONS variable from the client
|
||||
* when the connection is initiated. Furthermore, an already-started
|
||||
* backend will ignore changes to such an option in the configuration
|
||||
* file. The idea is that these options are fixed for a given backend
|
||||
* once it's started, but they can vary across backends.
|
||||
*
|
||||
* SUSET options can be set at postmaster startup, with the SIGHUP
|
||||
* mechanism, or from SQL if you're a superuser. These options cannot
|
||||
|
Reference in New Issue
Block a user