Re: [PATCH] Fix ALTER SYSTEM empty string bug for GUC_LIST_QUOTE parameters

Andrei Klychkov <andrew.a.klychkov@gmail.com>

From: Andrei Klychkov <andrew.a.klychkov@gmail.com>
To: Jim Jones <jim.jones@uni-muenster.de>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2025-09-03T09:59:26Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Allow "SET list_guc TO NULL" to specify setting the GUC to empty.

Attachments

Hi Jim,

Thanks a lot for reviewing! Nice catch, TIL!
Version 2 of the patch is attached, please check it out.
In a nutshell, the issue actually wasn't in the flatten_set_variable_args()
function as initially suspected, but rather in the configuration file
writing logic in the write_auto_conf_file(): more details in v2_README.md

Looking forward to your feedback, thanks!
Regards
Andrew

On Tue, Sep 2, 2025 at 2:16 PM Jim Jones <jim.jones@uni-muenster.de> wrote:

> Hi Andrew
>
> On 28.08.25 11:29, Andrei Klychkov wrote:
> > I'm submitting a patch to fix a bug where ALTER SYSTEM SET with empty
> > strings for
> > GUC_LIST_QUOTE parameters (like shared_preload_libraries) results in
> > malformed
> > configuration entries that cause server crashes on restart.
>
> I tested the patch and it does what you described
>
> $ psql postgres -c "ALTER SYSTEM SET shared_preload_libraries TO '';"
> ALTER SYSTEM
> $ cat /usr/local/postgres-dev/testdb/postgresql.auto.conf
> # Do not edit this file manually!
> # It will be overwritten by the ALTER SYSTEM command.
> shared_preload_libraries = ''
>
> However, it breaks one of the rules.sql regression tests
>
> @@ -3552,21 +3552,7 @@
>      SET local_preload_libraries TO "Mixed/Case", 'c:/''a"/path', '',
>
> '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'
>      IMMUTABLE STRICT;
>  SELECT pg_get_functiondef('func_with_set_params()'::regprocedure);
>
> -
>
> pg_get_functiondef
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> - CREATE OR REPLACE FUNCTION
>
> public.func_with_set_params()
> +
> -  RETURNS
>
> integer
> +
> -  LANGUAGE
>
> sql
> +
> -  IMMUTABLE
>
> STRICT
> +
> -  SET search_path TO
>
> 'pg_catalog'
> +
> -  SET extra_float_digits TO
>
> '2'
> +
> -  SET work_mem TO
>
> '4MB'
> +
> -  SET "DateStyle" TO 'iso,
>
> mdy'
> +
> -  SET local_preload_libraries TO 'Mixed/Case', 'c:/''a"/path', '',
>
> '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'+
> - AS $function$select
>
> 1;$function$
> +
> -
> -(1 row)
> -
> +ERROR:  invalid list syntax in proconfig item
>
> Best, Jim
>