Re: Fix variadic argument types for pg_get_xxx_ddl() functions
Chao Li <li.evan.chao@gmail.com>
From: Chao Li <li.evan.chao@gmail.com>
To: Akshay Joshi <akshay.joshi@enterprisedb.com>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>,
Andrew Dunstan <andrew@dunslane.net>
Date: 2026-06-23T09:29:04Z
Lists: pgsql-hackers
> On Jun 23, 2026, at 16:34, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
>
> Hi Chao,
>
> Patch looks good to me. I have added the following test cases in my local version in "src/test/modules/test_misc/t/012_ddlutils.pl". If possible add those and resend the patch
>
> +# Options passed via VARIADIC ARRAY
> +$result = $node->safe_psql('postgres',
> + q{SELECT * FROM pg_get_role_ddl('regress_role_ddl_test2',
> + VARIADIC ARRAY['pretty', 'false'])});
> +unlike($result, qr/\n\s+SUPERUSER/,
> + 'role VARIADIC ARRAY pretty=false suppresses indentation');
> +like($result, qr/SUPERUSER/, 'role VARIADIC ARRAY pretty=false still emits attributes');
>
>
> +# Options passed via VARIADIC ARRAY
> +$result = ddl_filter(
> + $node->safe_psql(
> + 'postgres',
> + q{SELECT pg_get_database_ddl
> + FROM pg_get_database_ddl('regression_ddlutils_test',
> + VARIADIC ARRAY['pretty', 'false'])}));
> +unlike($result, qr/\n\s+WITH TEMPLATE/,
> + 'database VARIADIC ARRAY pretty=false suppresses indentation');
> +like(
> + $result,
> + qr/CREATE DATABASE regression_ddlutils_test/,
> + 'database VARIADIC ARRAY still emits CREATE');
>
>
> +# Options passed via VARIADIC ARRAY (name variant)
> +$result = $node->safe_psql(
> + 'postgres',
> + q{SELECT * FROM pg_get_tablespace_ddl('regress_allopt_tblsp',
> + VARIADIC ARRAY['pretty', 'false'])});
> +unlike($result, qr/\n\s+OWNER/,
> + 'tablespace VARIADIC ARRAY pretty=false suppresses indentation (name)');
> +like(
> + $result,
> + qr/OWNER regress_role_ddl_test1/,
> + 'tablespace VARIADIC ARRAY still emits OWNER (name)');
> +
> +# Options passed via VARIADIC ARRAY (oid variant)
> +$result = $node->safe_psql(
> + 'postgres', q{
> + SELECT * FROM pg_get_tablespace_ddl(
> + (SELECT oid FROM pg_tablespace
> + WHERE spcname = 'regress_allopt_tblsp'),
> + VARIADIC ARRAY['pretty', 'false'])});
> +unlike($result, qr/\n\s+OWNER/,
> + 'tablespace VARIADIC ARRAY pretty=false suppresses indentation (oid)');
> +like(
> + $result,
> + qr/CREATE TABLESPACE regress_allopt_tblsp/,
> + 'tablespace VARIADIC ARRAY still emits CREATE (oid)');
> +
>
Hi Akshay,
I actually considered adding VARIADIC ARRAY test cases when I worked on the patch, but I intentionally avoided them because I found that similar variadic functions, such as json_extract_path and jsonb_extract_path, don’t have such tests either. Also, the sanity check is now able to detect this problem.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/
Commits
-
Fix incorrect declarations of variadic pg_get_*_ddl() functions.
- 2af70e937478 19 (unreleased) landed