Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement - Mailing list pgsql-hackers

From Akshay Joshi
Subject Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement
Date
Msg-id CANxoLDf+Ak=S+V1Rx25Eqh7r6cuWZtHYiEo_AZsn9eqiWbVGEg@mail.gmail.com
Whole thread
In response to Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement  (Japin Li <japinli@hotmail.com>)
Responses Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement
List pgsql-hackers
I have resolved the review comments. Removed the hardcoded 'utf-8' encoding, the logic now retrieves the encoding dynamically. This ensures accuracy because the default encoding for CREATE DATABASE is derived from the template database (template1) rather than being a static value.

Attached is the v13 patch, now ready for further review.

On Fri, Mar 6, 2026 at 8:13 PM Japin Li <japinli@hotmail.com> wrote:

Hi, Akshay

On Fri, 06 Mar 2026 at 17:21, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
> I have updated the documentation.
> Attached is the v12 patch, now ready for further review.
>

Thanks for updating the patch.

I might not have expressed myself clearly in my last email — apologies.
Here's a diff that should make it clearer.

diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index bbf82c1d6c0..1ed56ee71ab 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -13859,7 +13859,6 @@ parse_ddl_options(FunctionCallInfo fcinfo, int variadic_start)
        bool       *nulls;
        Oid                *types;
        int                     nargs;
-       bool            found = false;

        /* Extract variadic arguments */
        nargs = extract_variadic_args(fcinfo, variadic_start, true,
@@ -13887,8 +13886,7 @@ parse_ddl_options(FunctionCallInfo fcinfo, int variadic_start)
        {
                char       *name;
                bool            bval;
-
-               found = false;
+               bool            found = false;

                /* Key must not be null */
                if (nulls[i])
@@ -13925,8 +13923,8 @@ parse_ddl_options(FunctionCallInfo fcinfo, int variadic_start)
                        if (!parse_bool(valstr, &bval))
                                ereport(ERROR,
                                                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                                errmsg("argument %d: invalid value \"%s\" for key \"%s\"",
-                                                               i + 2, valstr, name),
+                                                errmsg("value for option \"%s\" at position %d has invalid value \"%s\"",
+                                                               name, i + 2, valstr),
                                                 errhint("Valid values are: true, false, yes, no, 1, 0, on, off.")));
                        pfree(valstr);
                }
@@ -13934,8 +13932,8 @@ parse_ddl_options(FunctionCallInfo fcinfo, int variadic_start)
                {
                        ereport(ERROR,
                                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                        errmsg("argument %d: value for key \"%s\" must be boolean or text type",
-                                                       i + 2, name)));
+                                        errmsg("value for option \"%s\" at position %d has type %s, expected type boolean or text",
+                                                       name, i + 2, format_type_be(types[i + 1]))));
                }

                /*
@@ -13983,7 +13981,7 @@ parse_ddl_options(FunctionCallInfo fcinfo, int variadic_start)
 /*
  * pg_get_database_ddl
  *
- * Generate a CREATE DATABASE statement for the specified database name or oid.
+ * Generate a CREATE DATABASE statement for the specified database oid.
  *
  * db_oid - OID of the database for which to generate the DDL.
  * options - Variadic name/value pairs to modify the output.

--
Regards,
Japin Li
ChengDu WenWu Information Technology Co., Ltd.
Attachment

pgsql-hackers by date:

Previous
From: Etsuro Fujita
Date:
Subject: Re: Options to control remote transactions’ access/deferrable modes in postgres_fdw
Next
From: wenhui qiu
Date:
Subject: Re: enhance wraparound warnings