Re: updates for handling optional argument in system functions

From: Mark Wong <markwkm(at)gmail(dot)com>
To: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: updates for handling optional argument in system functions
Date: 2026-01-30 00:15:18
Message-ID: aXv4FjR1RTr386D1@o
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Jan 21, 2026 at 04:45:35PM +0800, Chao Li wrote:
>
>
> > On Jan 21, 2026, at 02:15, Mark Wong <markwkm(at)gmail(dot)com> wrote:
> >
> > Hi everyone,
> >
> > On Tue, Dec 09, 2025 at 03:28:59PM -0800, Mark Wong wrote:
> >> Hi everyone,
> >>
> >> I noticed how it was preferred to define optional arguments with the
> >> system functions in system_functions.sql instead of defining them in
> >> pg_proc.dat.
> >>
> >> I took a gross stab at updating the ones that ended in _ext, which
> >> turned out to be 7 declarations across 6 system functions, and created a
> >> patch per system function, hoping it would be easier to review.
> >>
> >> Perhaps the most interesting thing to share is the total reduction of
> >> the lines of code, although system_functions.sql only grows:
> >>
> >> src/backend/catalog/system_functions.sql | 49 ++++++++
> >> src/backend/utils/adt/ruleutils.c | 130 ----------------------
> >> src/include/catalog/pg_proc.dat | 36 ++----
> >> 3 files changed, 56 insertions(+), 159 deletions(-)
> >>
> >>
> >> Is that something we want?
> >
> > I fixed an error caught by the address sanitizer in CI [1] and am uploading a
> > new patchset. The only change is to 2 lines in
> > v2-0005-Handle-pg_get_expr-default-args-in-system_functio.patch to update a
> > call to pg_get_expr with the correct number of arguments in tablecmds.c.
> >
> > Regards,
> > Mark
> >
> > [1] https://cirrus-ci.com/task/6109065824174080
>
> Hi Mark,
>
> Thanks for the patch. After reviewing it, I have mixed feelings. From one side, it removes some redundant code, which is good. In the other side, I doubt if we should delete proc entries from pg_proc.c? Say, there is a view that uses a proc to be deleted, the proc OID is stored with the view, then after an upgrade, the view would be broken. From this perspective, should we retain the old proc entries and only point them to the new functions?

I don't have a solution for the case of a view storing the OID, but Álvaro
Herrera suggested to me to at least try preventing those OIDs from being
reused.

I've attached a v3 patch set that introduces src/include/catalog/pg_retired.dat
to store previously used OIDs and procedure names that the scripts unused_oids
and renumber_oids.pl can consume to prevent the reuse of retired OIDs.

Maybe that can also be used towards finding that particular solution...

Regards,
Mark
--
Mark Wong <markwkm(at)gmail(dot)com>
EDB https://enterprisedb.com

Attachment Content-Type Size
v3-0001-Track-retired-system-procedures-in-pg_retired.dat.patch text/x-diff 3.0 KB
v3-0002-Handle-pg_get_ruledef-default-args-in-system_func.patch text/x-diff 3.5 KB
v3-0003-Handle-pg_get_viewdef-default-args-in-system_func.patch text/x-diff 5.0 KB
v3-0004-Handle-pg_get_indexdef-default-args-in-system_fun.patch text/x-diff 3.8 KB
v3-0005-Handle-pg_get_constraintdef-default-args-in-syste.patch text/x-diff 3.8 KB
v3-0006-Handle-pg_get_expr-default-args-in-system_functio.patch text/x-diff 4.4 KB
v3-0007-Handle-pg_get_triggerdef-default-args-in-system_f.patch text/x-diff 3.5 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Alexander Borisov 2026-01-30 00:18:32 Re: Non-committer reviews: is it helpful?
Previous Message Fujii Masao 2026-01-30 00:07:04 Re: Remove unused argument from ApplyLogicalMappingFile()