Disallow newlines in parameter values to be set in ALTER SYSTEM.
it's also fixed problem with setting parameter to ''. Before
alter system SET shared_preload_libraries = '';
produced wrong postgresql.auto.conf and the only way was to use RESET
alter system RESET shared_preload_libraries;
Ooops, it doesn't :(
FATAL: could not access file "": No such file or directory
cat /usr/local/pgsql-head/data/postgresql.auto.conf # Do not edit this file manually! # It will be overwritten by ALTER SYSTEM command. shared_preload_libraries = '""'
As noted by Julian Schauder in bug #14063, the configuration-file parser doesn't support embedded newlines in string literals. While there might someday be a good reason to remove that restriction, there doesn't seem to be one right now. However, ALTER SYSTEM SET could accept strings containing newlines, since many of the variable-specific value-checking routines would just see a newline as whitespace. This led to writing a postgresql.auto.conf file that was broken and had to be removed manually.
Pending a reason to work harder, just throw an error if someone tries this.
In passing, fix several places in the ALTER SYSTEM logic that failed to provide an errcode() for an ereport(), and thus would falsely log the failure as an internal XX000 error.
Back-patch to 9.4 where ALTER SYSTEM was introduced.