Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement

From: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>
To: Euler Taveira <euler(at)eulerto(dot)com>
Cc: Álvaro Herrera <alvherre(at)kurilemu(dot)de>, Amul Sul <sulamul(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>, japin <japinli(at)hotmail(dot)com>, Quan Zongliang <quanzongliang(at)yeah(dot)net>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement
Date: 2026-02-27 12:22:36
Message-ID: CANxoLDfR-8nOYetoSKiJ9yVvMkXodVRqR+e=7CSEwiJTrU7yrA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Following suggestions from Alvaro and Mark, I have re-implemented this
feature using variadic function argument pairs.
This patch incorporates Mark Wong’s documentation updates, Amul’s one
review comment, and the majority of Euler’s comments.

*New changes:*
- Supports flexible DDL options as key-value pairs:
- pretty - Format output for readability
- owner - Include OWNER clause
- tablespace - Include TABLESPACE clause
- defaults - Include parameters even if it is set to default value.
- Option values accept: 'yes'/'on'/true/'1' (or their negatives)

*Usage Examples:*
-- Basic usage with options
SELECT pg_get_database_ddl('mydb', 'owner', 'yes', 'defaults', 'yes');
-- Pretty-printed output without owner and tablespace
SELECT pg_get_database_ddl('mydb', 'owner', 'no', 'tablespace', 'no',
'pretty', 'on');
-- Using boolean values
SELECT pg_get_database_ddl('mydb', 'owner', false, 'defaults', true);
-- Using OID
SELECT pg_get_database_ddl(16384, 'pretty', 'yes');

*Note:* To keep things clean, I’ve moved the logic into two generic
functions (*get_formatted_string* and *parse_ddl_options*) and a common
*DDLOptionDef* struct. This should simplify the work for the rest of the
pg_get_<object>_ddl patches.

Attached is the v9 patch which is ready for review.

On Thu, Feb 26, 2026 at 2:49 AM Euler Taveira <euler(at)eulerto(dot)com> wrote:

> On Wed, Feb 25, 2026, at 8:53 AM, Álvaro Herrera wrote:
> >
> > I'm surprised to not have seen an update on this topic following the
> > discovery by Mark Wong that commit d32d1463995c (in branch 18) already
> > established a convention for passing arguments to functions: use argument
> > pairs to variadic functions, the way pg_restore_relation_stats() and
> > pg_restore_attribute_stats() work. While I like my previous suggestion
> > of using DefElems better, I think it's more sensible to follow this
> > established precedent and not innovate on this.
> >
>
> This convention is much older than the referred commit. It predates from
> the
> logical decoding (commit b89e151054a0). See
> pg_logical_slot_get_changes_guts()
> that is an internal function for pg_logical_slot_FOO_changes(). It seems a
> good idea to have a central function to validate the variadic parameter
> for all
> of these functions.
>
>
> --
> Euler Taveira
> EDB https://www.enterprisedb.com/
>

Attachment Content-Type Size
v9-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch application/octet-stream 32.8 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrey Borodin 2026-02-27 12:31:08 Re: Modernize error message for malformed B-Tree tuple posting
Previous Message Andrew Dunstan 2026-02-27 12:12:52 Re: Non-text mode for pg_dumpall