Subject: Re: updates for handling optional argument in system functions

From: Mark Wong <[email-masked]>
Date: Tue, 20 Jan 2026 10:15:13 -0800

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
--
Mark Wong <[email-masked]>
EDB https://enterprisedb.com

---

From: Chao Li <[email-masked]>
Date: Wed, 21 Jan 2026 16:45:35 +0800

> On Jan 21, 2026, at 02:15, Mark Wong <[email-masked]> wrote:
> 
> Hi everyone,
> 
> <v2-0001-Handle-pg_get_ruledef-default-args-in-system_func.patch><v2-0002-Handle-pg_get_viewdef-default-args-in-system_func.patch><v2-0003-Handle-pg_get_indexdef-default-args-in-system_fun.patch><v2-0004-Handle-pg_get_constraintdef-default-args-in-syste.patch><v2-0005-Handle-pg_get_expr-default-args-in-system_functio.patch><v2-0006-Handle-pg_get_triggerdef-default-args-in-system_f.patch>

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?

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/