Improve define_custom_variable's handling of pre-existing settings.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Oct 2011 23:57:21 +0000 (19:57 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Oct 2011 23:57:21 +0000 (19:57 -0400)
commit41e461d36fb1ef78494429f28ea4b72c759f419d
tree42fd260b4b95417a452b4e76ff4831ea44a65b89
parentfa56a0c3e01c175695e932e6cdc2c6915df5adc6
Improve define_custom_variable's handling of pre-existing settings.

Arrange for any problems with pre-existing settings to be reported as
WARNING not ERROR, so that we don't undesirably abort the loading of the
incoming add-on module.  The bad setting is just discarded, as though it
had never been applied at all.  (This requires a change in the API of
set_config_option.  After some thought I decided the most potentially
useful addition was to allow callers to just pass in a desired elevel.)

Arrange to restore the complete stacked state of the variable, rather than
cheesily reinstalling only the active value.  This ensures that custom GUCs
will behave unsurprisingly even when the module loading operation occurs
within nested subtransactions that have changed the active value.  Since a
module load could occur as a result of, eg, a PL function call, this is not
an unlikely scenario.
contrib/tsearch2/tsearch2.c
src/backend/commands/extension.c
src/backend/utils/adt/ri_triggers.c
src/backend/utils/misc/guc-file.l
src/backend/utils/misc/guc.c
src/include/utils/guc.h