|
4 | 4 | * Support for grand unified configuration scheme, including SET
|
5 | 5 | * command, configuration file, and command line options.
|
6 | 6 | *
|
7 |
| - * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.54 2001/09/30 18:57:45 tgl Exp $ |
| 7 | + * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.55 2001/09/30 20:16:21 tgl Exp $ |
8 | 8 | *
|
9 | 9 | * Copyright 2000 by PostgreSQL Global Development Group
|
10 | 10 | * Written by Peter Eisentraut <peter_e@gmx.net>.
|
@@ -704,37 +704,49 @@ set_config_option(const char *name, const char *value,
|
704 | 704 | * precise rules. Note that we don't want to throw errors if we're in
|
705 | 705 | * the SIGHUP context. In that case we just ignore the attempt.
|
706 | 706 | */
|
707 |
| - if (record->context == PGC_POSTMASTER && context != PGC_POSTMASTER) |
| 707 | + switch (record->context) |
708 | 708 | {
|
709 |
| - if (context != PGC_SIGHUP) |
710 |
| - elog(ERROR, "'%s' cannot be changed after server start", name); |
711 |
| - else |
712 |
| - return true; |
713 |
| - } |
714 |
| - else if (record->context == PGC_SIGHUP && context != PGC_SIGHUP && |
715 |
| - context != PGC_POSTMASTER) |
716 |
| - { |
717 |
| - elog(ERROR, "'%s' cannot be changed now", name); |
718 |
| - |
719 |
| - /* |
720 |
| - * Hmm, the idea of the SIGHUP context is "ought to be global, but |
721 |
| - * can be changed after postmaster start". But there's nothing |
722 |
| - * that prevents a crafty administrator from sending SIGHUP |
723 |
| - * signals to individual backends only. |
724 |
| - */ |
725 |
| - } |
726 |
| - else if (record->context == PGC_BACKEND && context != PGC_BACKEND |
727 |
| - && context != PGC_POSTMASTER) |
728 |
| - { |
729 |
| - if (context != PGC_SIGHUP) |
730 |
| - elog(ERROR, "'%s' cannot be set after connection start", name); |
731 |
| - else |
732 |
| - return true; |
| 709 | + case PGC_POSTMASTER: |
| 710 | + if (context == PGC_SIGHUP) |
| 711 | + return true; |
| 712 | + if (context != PGC_POSTMASTER) |
| 713 | + elog(ERROR, "'%s' cannot be changed after server start", name); |
| 714 | + break; |
| 715 | + case PGC_SIGHUP: |
| 716 | + if (context != PGC_SIGHUP && context != PGC_POSTMASTER) |
| 717 | + elog(ERROR, "'%s' cannot be changed now", name); |
| 718 | + /* |
| 719 | + * Hmm, the idea of the SIGHUP context is "ought to be global, but |
| 720 | + * can be changed after postmaster start". But there's nothing |
| 721 | + * that prevents a crafty administrator from sending SIGHUP |
| 722 | + * signals to individual backends only. |
| 723 | + */ |
| 724 | + break; |
| 725 | + case PGC_BACKEND: |
| 726 | + if (context == PGC_SIGHUP) |
| 727 | + { |
| 728 | + /* |
| 729 | + * If a PGC_BACKEND parameter is changed in the config file, |
| 730 | + * we want to accept the new value in the postmaster (whence |
| 731 | + * it will propagate to subsequently-started backends), but |
| 732 | + * ignore it in existing backends. This is a tad klugy, but |
| 733 | + * necessary because we don't re-read the config file during |
| 734 | + * backend start. |
| 735 | + */ |
| 736 | + if (IsUnderPostmaster) |
| 737 | + return true; |
| 738 | + } |
| 739 | + else if (context != PGC_BACKEND && context != PGC_POSTMASTER) |
| 740 | + elog(ERROR, "'%s' cannot be set after connection start", name); |
| 741 | + break; |
| 742 | + case PGC_SUSET: |
| 743 | + if (context == PGC_USERSET || context == PGC_BACKEND) |
| 744 | + elog(ERROR, "permission denied"); |
| 745 | + break; |
| 746 | + case PGC_USERSET: |
| 747 | + /* always okay */ |
| 748 | + break; |
733 | 749 | }
|
734 |
| - else if (record->context == PGC_SUSET && |
735 |
| - (context == PGC_USERSET || context == PGC_BACKEND)) |
736 |
| - elog(ERROR, "permission denied"); |
737 |
| - |
738 | 750 |
|
739 | 751 | /*
|
740 | 752 | * Evaluate value and set variable
|
|
0 commit comments