Re: generating function default settings from pg_proc.dat - Mailing list pgsql-hackers

From Corey Huinker
Subject Re: generating function default settings from pg_proc.dat
Date
Msg-id CADkLM=dZa86W+cOb8RsghFHCL8-SbcCFpwusEZctt1mYN36uzA@mail.gmail.com
Whole thread Raw
In response to generating function default settings from pg_proc.dat  (Andrew Dunstan <andrew@dunslane.net>)
List pgsql-hackers


On Mon, Feb 16, 2026 at 12:31 PM Andrew Dunstan <andrew@dunslane.net> wrote:

Motivated by Bug 19409 [1] I decided to do something about a wart that
has bugged me for a while, namely the requirement to write stuff in
system_views.sql if you need to specify default values for function
arguments. Here's my attempt. The first patch here sets up the required
infrastructure. genbki.pl creates a file called function_defaults.sql
which is run by initdb at the appropriate time. There are two new fields
in pg_proc.dat entries: proargdflts,and provariadicdflt. These are
parsed and the appropriate CREATE OR REPLACE statement is generated and
placed in function_defaults.sql. The second patch applies this treatment
to 37 function definitions and removes the corresponding statements from
system_views.sql. This gets us closer to having pg_proc.dat as a single
source of truth.

+1 for the attempt. My preference would be for allowing CREATE OR REPLACE to specify an oid, but that's a non-starter for bootstrapping purposes, so this is the next best option.

The defaults read a little funny in that a human reader must line up the defaults right-to-left to then determine a given parameter's default, if any. For example:

   proname => 'json_strip_nulls', prorettype => 'json',
-  proargtypes => 'json bool', prosrc => 'json_strip_nulls' },
+  proargtypes => 'json bool',
+  proargnames => '{target,strip_in_arrays}', proargdflts => '{false}',
+  prosrc => 'json_strip_nulls' },

Perhaps we could require proargdflts to pre-pad with empty values 

    proargdflts => '{,false}'

or even be a hash

    proargdflts => { strip_in_arrays => 'false' }

which I will grant you is wordy, but its definitely clearer.

pgsql-hackers by date:

Previous
From: Daniel Gustafsson
Date:
Subject: Re: generating function default settings from pg_proc.dat
Next
From: Tom Lane
Date:
Subject: Re: generating function default settings from pg_proc.dat