Thread

  1. [PATCH v2 5/6] Handle pg_get_expr default args in system_functions.sql

    Mark Wong <markwkm@gmail.com> — 2025-12-09T19:17:56Z

    Modernize pg_get_expr to use CREATE OR REPLACE FUNCTION to handle the
    optional pretty argument.
    ---
     src/backend/catalog/system_functions.sql |  7 +++++++
     src/backend/commands/tablecmds.c         |  4 ++--
     src/backend/utils/adt/ruleutils.c        | 17 -----------------
     src/include/catalog/pg_proc.dat          |  5 +----
     4 files changed, 10 insertions(+), 23 deletions(-)
    
    diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql
    index 1824faab231..a6f7cdf3a36 100644
    --- a/src/backend/catalog/system_functions.sql
    +++ b/src/backend/catalog/system_functions.sql
    @@ -692,6 +692,13 @@ LANGUAGE INTERNAL
     PARALLEL SAFE
     AS 'pg_get_constraintdef';
     
    +CREATE OR REPLACE FUNCTION
    +  pg_get_expr(expr pg_node_tree, relation oid, pretty bool DEFAULT false)
    +RETURNS TEXT
    +LANGUAGE INTERNAL
    +PARALLEL SAFE
    +AS 'pg_get_expr';
    +
     --
     -- The default permissions for functions mean that anyone can execute them.
     -- A number of functions shouldn't be executable by just anyone, but rather
    diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
    index f976c0e5c7e..12c4ce08437 100644
    --- a/src/backend/commands/tablecmds.c
    +++ b/src/backend/commands/tablecmds.c
    @@ -17480,8 +17480,8 @@ decompile_conbin(HeapTuple contup, TupleDesc tupdesc)
     	if (isnull)
     		elog(ERROR, "null conbin for constraint %u", con->oid);
     
    -	expr = DirectFunctionCall2(pg_get_expr, attr,
    -							   ObjectIdGetDatum(con->conrelid));
    +	expr = DirectFunctionCall3(pg_get_expr, attr,
    +							   ObjectIdGetDatum(con->conrelid), false);
     	return TextDatumGetCString(expr);
     }
     
    diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
    index 9faf340f0c6..305e3e80c41 100644
    --- a/src/backend/utils/adt/ruleutils.c
    +++ b/src/backend/utils/adt/ruleutils.c
    @@ -2573,23 +2573,6 @@ decompile_column_index_array(Datum column_index_array, Oid relId,
      */
     Datum
     pg_get_expr(PG_FUNCTION_ARGS)
    -{
    -	text	   *expr = PG_GETARG_TEXT_PP(0);
    -	Oid			relid = PG_GETARG_OID(1);
    -	text	   *result;
    -	int			prettyFlags;
    -
    -	prettyFlags = PRETTYFLAG_INDENT;
    -
    -	result = pg_get_expr_worker(expr, relid, prettyFlags);
    -	if (result)
    -		PG_RETURN_TEXT_P(result);
    -	else
    -		PG_RETURN_NULL();
    -}
    -
    -Datum
    -pg_get_expr_ext(PG_FUNCTION_ARGS)
     {
     	text	   *expr = PG_GETARG_TEXT_PP(0);
     	Oid			relid = PG_GETARG_OID(1);
    diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
    index 96eb7baf8e0..3a0be2d4b2a 100644
    --- a/src/include/catalog/pg_proc.dat
    +++ b/src/include/catalog/pg_proc.dat
    @@ -3986,9 +3986,6 @@
     { oid => '1662', descr => 'trigger description',
       proname => 'pg_get_triggerdef', provolatile => 's', prorettype => 'text',
       proargtypes => 'oid', prosrc => 'pg_get_triggerdef' },
    -{ oid => '1716', descr => 'deparse an encoded expression',
    -  proname => 'pg_get_expr', provolatile => 's', prorettype => 'text',
    -  proargtypes => 'pg_node_tree oid', prosrc => 'pg_get_expr' },
     { oid => '1665', descr => 'name of sequence for a serial column',
       proname => 'pg_get_serial_sequence', provolatile => 's', prorettype => 'text',
       proargtypes => 'text text', prosrc => 'pg_get_serial_sequence' },
    @@ -8518,7 +8515,7 @@
     { oid => '2509',
       descr => 'deparse an encoded expression with pretty-print option',
       proname => 'pg_get_expr', provolatile => 's', prorettype => 'text',
    -  proargtypes => 'pg_node_tree oid bool', prosrc => 'pg_get_expr_ext' },
    +  proargtypes => 'pg_node_tree oid bool', prosrc => 'pg_get_expr' },
     { oid => '2510', descr => 'get the prepared statements for this session',
       proname => 'pg_prepared_statement', prorows => '1000', proretset => 't',
       provolatile => 's', proparallel => 'r', prorettype => 'record',
    -- 
    2.43.0
    
    
    --3/nz5wg6+DYwHsLU
    Content-Type: text/x-diff; charset=us-ascii
    Content-Disposition: attachment;
    	filename="v2-0006-Handle-pg_get_triggerdef-default-args-in-system_f.patch"