diff --git a/src/lib/sql/functions.sql.ts b/src/lib/sql/functions.sql.ts index ea41d5e17..b0ff0ac84 100644 --- a/src/lib/sql/functions.sql.ts +++ b/src/lib/sql/functions.sql.ts @@ -110,10 +110,13 @@ from ( select oid, - (string_to_array(unnest(proconfig), '='))[1] as param, - (string_to_array(unnest(proconfig), '='))[2] as value + split_part(cfg, '=', 1) as param, + -- Keep everything after the first '=', so values like application_name=api=worker + -- round-trip intact (string_to_array(...)[2] truncates at the next '='). + substring(cfg from position('=' in cfg) + 1) as value from - functions + functions, + lateral unnest(proconfig) as cfg ) as t group by oid diff --git a/test/lib/functions.ts b/test/lib/functions.ts index ce26e0781..bc2d040e6 100644 --- a/test/lib/functions.ts +++ b/test/lib/functions.ts @@ -531,3 +531,23 @@ test('retrieve function by args filter - function with no arguments', async () = }) expect(res.error).toBeNull() }) + +test('config_params preserves equals signs in values', async () => { + await pgMeta.query(` + create or replace function public.config_equals_test() + returns void + language sql + set application_name to 'api=worker' + as $$ select 1; $$; + `) + + const res = await pgMeta.functions.retrieve({ + schema: 'public', + name: 'config_equals_test', + args: [], + }) + expect(res.error).toBeNull() + expect(res.data?.config_params).toEqual({ application_name: 'api=worker' }) + + await pgMeta.query(`drop function public.config_equals_test();`) +})