Re: pg_get__*_ddl consolidation

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Jelte Fennema-Nio <postgres@jeltef.nl>
Cc: "David G. Johnston" <david.g.johnston@gmail.com>, Japin Li <japinli@hotmail.com>, Zsolt Parragi <zsolt.parragi@percona.com>, Euler Taveira <euler@eulerto.com>, Álvaro Herrera <alvherre@kurilemu.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-06T11:55:02Z
Lists: pgsql-hackers
On 2026-04-05 Su 12:35 PM, Jelte Fennema-Nio wrote:
> On Sun, 5 Apr 2026 at 17:06, Andrew Dunstan <andrew@dunslane.net> wrote:
>> Pushed. I have moved the remaining get_*_ddl items to PG20-1
> +1 on having  this feature in general. But I'm not sure I understand
> why it needs the whole bespoke string-based option parsing in the
> first commit. Why not use named arguments for this, i.e. have the
> usage syntax be:
>
> SELECT * FROM pg_get_role_ddl('regress_role_ddl_test3', pretty => true);
>
> Instead of the current:
>
> SELECT * FROM pg_get_role_ddl('regress_role_ddl_test3', 'pretty', 'true');


There was quite a deal of discussion around this mechanism. See Euler's 
review at [1] and follow-up at [2] for the original discussion of the 
VARIADIC option-parsing design and the use cases it was meant to 
address. I'm prepared to revisit it is there's a strong consensus on the 
point.


cheers


andrew



[1] 
https://www.postgresql.org/message-id/4e60bcae-8222-4e1f-8e5b-d73b59c93304%40app.fastmail.com 

[2] 
https://www.postgresql.org/message-id/4c695e76-5ab7-449f-8060-76518dd41468%40app.fastmail.com 


--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Use named boolean parameters for pg_get_*_ddl option arguments

  2. Convert ddlutils regression tests to TAP tests.

  3. Fix pfree crash in pg_get_role_ddl() and pg_get_database_ddl().

  4. Fixups for a4f774cf1c7

  5. Add infrastructure for pg_get_*_ddl functions

  6. Add pg_get_database_ddl() function

  7. Add pg_get_role_ddl() function

  8. Add pg_get_tablespace_ddl() function