Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxmn9-00H8Eh-2j for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 14:01:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxmn5-00Cx4w-2u for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 14:01:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxmn5-00Cx4o-1R for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 14:01:32 +0000 Received: from mail-australiaeastazolkn19010019.outbound.protection.outlook.com ([52.103.72.19] helo=SY8PR01CU002.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vxmn3-00000000NjG-3jsE for pgsql-hackers@postgresql.org; Wed, 04 Mar 2026 14:01:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GFs+ON6z+vAhlhaqI8dL+LlUTkzFe4AxlCofozYPOGck778knDWclyqKOR5Ai2NirmueZEtWnDCZ8DOGw8k9+wy+IQoTpSuzAYzO829M3miLPQNAoz2pcW3iJCroQlNe1O9n4P1+ORvMxGE6WdRWLNA+xQYt6uU/bzqZ8Ag/Tpz19byjrRVfGzmRUvl6pxbhDt63nlHxCHzJtijrEaUy4DoVY05QnikgP1ibjP6jWp0dOSCn3tN4QzTo7FFEuFdl9qfyoow1G6tIaDVZAw3czMMBryIbe4VPeXW91Vr4Vv8ruoZ4vFmYRZWfliYzKzeWMK+5caKX0EKueXszXHdfow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZFl3EC/nAeNfZWAp74q4WzOiWgHFQHqXqgdC/WkSEik=; b=OLTtS0n7YbG1WG6elDdKXb0FRzxe4+upAhKEb+kS1xzvPhRWMkodju/GQxIdzL0Avw6KMuvHE0BymaD/1XBn+aOknHrHB3ryvYjweolDwp6Wv/cBvoJlQjyoFBGCFK47FFxeOXH+B4hV5MdWcWQEyPmKYi8+KoXTBSOKlFSvFJ0twWmohqEcyp4jRJDxAPPW6y+zA/wOZf1BrMAMfkid/AkyOyVsnLbASJEEmXXvbu0cDBzNpwABl2HEvxqH+sKfNk2U07S8M6FxmVqYNHXm9MjjfcYT8aezWkuZk/b8xNFsGL+vkzx649HUouMUpJTBuhsdZfV8TJkKc9rIQ+Zrpw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZFl3EC/nAeNfZWAp74q4WzOiWgHFQHqXqgdC/WkSEik=; b=YKAl2RXZiSRrJI4DNFWEtd/hbPK+iZ3SHeJEjzwsIuXl6uKXY42wXVx+DeN8El6Y+FqtTy/vuTVOE7A2WTEiZcVygEHNaRQ8PG3UPYXwuJQfZqN8JoAuMOSLXKk2ekaX6OFjVMERe0oj7md8IAm01vJxhZ6a3AMQdLygusIh0ywnFINjpHa6X1AXtfYWZy6zz0XDPRb2drNrY090LqD9vC/a5gEvqwfySghk+/CriEzU+dGpFQ/ewRvfYV8WGzCWhd2M8hrDulKSK2Jg3EYB86XfLa1WsCuX8uOdmanoeGhxAdJjEc7LI8zj5k1DULHkqJZIfGdq2KaPRtYOJpGeOQ== Received: from SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) by SY4PR01MB6284.ausprd01.prod.outlook.com (2603:10c6:10:10c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.17; Wed, 4 Mar 2026 14:01:23 +0000 Received: from SY7PR01MB10921.ausprd01.prod.outlook.com ([fe80::7908:e00:4ab1:d120]) by SY7PR01MB10921.ausprd01.prod.outlook.com ([fe80::7908:e00:4ab1:d120%5]) with mapi id 15.20.9654.022; Wed, 4 Mar 2026 14:01:23 +0000 From: Japin Li To: Akshay Joshi Cc: =?utf-8?Q?=C3=81lvaro?= Herrera , Euler Taveira , Amul Sul , Andrew Dunstan , Chao Li , Quan Zongliang , pgsql-hackers Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement In-Reply-To: (Akshay Joshi's message of "Wed, 4 Mar 2026 18:29:53 +0530") References: <202603040943.2jvgphmddgcs@alvherre.pgsql> User-Agent: mu4e 1.12.12; emacs 29.3 Date: Wed, 04 Mar 2026 22:01:19 +0800 Message-ID: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:26c::19) To SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) X-Microsoft-Original-Message-ID: <87tsuvlmmo.fsf@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY7PR01MB10921:EE_|SY4PR01MB6284:EE_ X-MS-Office365-Filtering-Correlation-Id: af880bd2-219b-44c2-346e-08de79f684c4 X-Microsoft-Antispam: BCL:0;ARA:14566002|461199028|12121999013|19110799012|23021999003|5072599009|11091999009|15080799012|6090799003|8060799015|40105399003|52005399003|3412199025|440099028; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TjBSWkNRcTc1akdWZjFaTW9tMVRvS2IzcE9vOVFaM05DZzd0eGliSmNHM01F?= =?utf-8?B?YTFJdHQ5NDRseWo2VC80eDJ6eEZuVStuUjY0RmEwRU14OEZ2OW1mRklDdjgr?= =?utf-8?B?SHpuNk8vejdZMFJOZU5FMWI5V0FZQlJ3b1VUdFM1UlcxZVF1OFpuWlBrbDJD?= =?utf-8?B?TlVxNHBmczc2eGRmZ2c1TURZWC9NbFlucVdLdVFSSWlhaTJpM2I1WjQwcXNN?= =?utf-8?B?ZHZRV2laNEZaTWZkU1lhOUFuQllERkZDT1NsM29xTzZ5Q0FWTHNseU5vLzlM?= =?utf-8?B?Z1cyTHFteDQ5Qit5dDBsVXp0NDYyT0w0aTREYzExVFFNS2ZiekR4UFVBV3Zn?= =?utf-8?B?YmlZeTgrNEt4MysreUZvK2x0aXpEZlpTT2RJWWIrSktXeTBWSmNON0Z4S2FB?= =?utf-8?B?RUFYU0hRbTZ5VkVXd0JHNmJmQjVFTHpIRHB2YlZac0RuWTVYcS9mWWxZanJH?= =?utf-8?B?R3poRldKOHh4TU5NOG1lMXltNXdQTGF5di9jUE10WTUrNTJtR2JKYzBGczJH?= =?utf-8?B?dU4rR25ud1VZRTkwdkk3Y0U1MnJMbXg4cUlDVGhMWlN1MjhGbXJid1BQM1cr?= =?utf-8?B?UU0yQlpZb2RLQjNzWkp3ejB1aWpqT2xad3hpNjNKWFJvNEtQeVVnZjJWUER4?= =?utf-8?B?R2lRNnFWZk5YcVYvcm9tanhYUnNkR2RROGs2bUlmdGVSZ3dsVDBmV3ZiUlVa?= =?utf-8?B?d3BDRUMzWVlURFF4M1hsYlFIdmtWSHoxeWFEb01kQ2NUSXRNeHA2MTVSdnN0?= =?utf-8?B?KzJIenl3MG9DMU9yS3hvSHE4YjZ0YW5BTWd6T3ZQRXl1ZXRpSXE1WnVWcFBE?= =?utf-8?B?RGUvaDR4MFgwdXFhRXM5cDVITzlsdHFkQmg3aDQ5WlVuMzFxb3pKeE5nY2N5?= =?utf-8?B?d0NDM1h0WjBCS3dDdUc5cmlLaFdTQmd6ZzdOTWZwVDhXd1M1OGt3VVdoRm9o?= =?utf-8?B?K0ZsY1RTWmVyaWhrQ0c1UWh6K2xMbU9jQ3pHL0MyOHVtUFJIM1dxblk1SWw5?= =?utf-8?B?WkNhZm1MVnRaN3BOcTBRbWtiMkxtR2Nnc01QQ0hxQllWUXVJVTNTSHQycUhF?= =?utf-8?B?ZGoxajVEbEZoYms3UTM4emNvV09ScE1naXNadlhsWlJvWU02QlkxNWo2MkVE?= =?utf-8?B?b2VHemQrd3J5aG1Jbm44c0JraTZZYm1RZld1dkUyQW9XMFNmM3FuOFdnOU8v?= =?utf-8?B?UEozbUtPMTBMeTZHVnY5WnN6U3BJenpzcFNjbVVhazQ4WHovSVdGTC9NVS81?= =?utf-8?B?VlczeFdVMG9OSHFIVzNzSFRDc0xZZC9Vc1dQTmZWdGk0Z0pqUTZhT0IreHdU?= =?utf-8?Q?G97p2G18nX9tMDLZ2LgqWcfOR23i584HxK?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MHhQVkVHNjFjb0pwQ3Y5ZmZQUzRkTWlIaDZiTFptc1ZuaVc2V3ZCcmdkbDlM?= =?utf-8?B?SmxkK0xocW00K3hJdTVoZ0luWWl5TzhRa3FpZm5tZjBIWmtZa0F3VXRla05h?= =?utf-8?B?cy91OXFsa1Z2VTcvQSttbkNPNDNQKzMwQzZoUWtuamYxd2ZNUmRFcUFqcytK?= =?utf-8?B?Nm9mc0ZJQVhHdXRNY0xHT2NxMVgxSTBGNmhseHk1V1c2VmVXeVdSemp0aHpH?= =?utf-8?B?SnMzVzltQU4rSHlLVXVrQzFnRndyQmtWNjIrRDgxUy9GZzJPK2FDOEhGQmJT?= =?utf-8?B?TlBBTzg0YkRENXlNV2x4K0JWYUF2TitHZ1cvOEZOeDVYa0M1Z0hyWUhTaTg1?= =?utf-8?B?SWYrRHdjZTh1UGU5ZU92RWk4WjQvSUhNQkF2Vk5yRy9wRENad202RHh1ZlNO?= =?utf-8?B?V3lHd1dVUHBzTnhTQTZTNkcyU3IwZHNFeERyOEpZOTEvYXJ4ZkR5SlA0bHUw?= =?utf-8?B?Z0dPVC96QWxTaktrd0xxUG8vWVczQXhoVzAzckZldkNrWm9YN05xK1ZjRVY3?= =?utf-8?B?NSsrcXhhTDVKNmhocEJldGl2eWZFbHZWRkl5bERBWkdFQnZYZGtldUNnRGZE?= =?utf-8?B?OHMzT3Q1eVppL1NhWCtJNWI4cURMb3Q4Sk9aYXUrNVZyRUdtSE91UEtzcUEr?= =?utf-8?B?N2dJSlhleU5oLzFPY3VTcjlnOGJOVkhHb2R6ZlJOK2t2VERZWXQ3RGxFRXdW?= =?utf-8?B?amNBckhJVHpNOUYwOUoxTE15OXJ5QlMrbUEyZzFYeSs2V1JKQWpod3ZFQ2hJ?= =?utf-8?B?a1hqSjVlR1lVZnV0bmtRYVlRZFN5NFdWdzBsWDlOVnRPTDV5V1RZWG83VHRJ?= =?utf-8?B?SjhONVo1K1VUTUwwTHlXc3NVTVBKYmZFVitpT3ZIaG80NXJyQWMyemxYU01F?= =?utf-8?B?RzZEVG9OWTZFUCsvWWFvTGhrUllraTUzRGtUV0I4bmt3KzVxRVhKOWNmQUJV?= =?utf-8?B?WmxaV0d5THEwZTZxNDZzV1cxYUUwcXYyZ1NGNnJqdkU2NVNUTGh1V1JrMmV5?= =?utf-8?B?bDdMWk1jTE1janhlSU1WNEI0VWRHNzl4TzNmZVpNbWI0T2wzeGRxRHBUa0Ux?= =?utf-8?B?SHNRa1BZU1ExWkR4UWhtYjJWU1hXV2FEL0pDNUh6MFd5cjJwUUNXc2h1dWF0?= =?utf-8?B?TSsxOUNXVEF1T2ZSOXF6N1FTb3J6dTlyWVpSN3JSNDNrcy9wVHFmZDcvY1I5?= =?utf-8?B?Q1lEQ05DUWsrNll0TUovOVZWZFVVOFZSWEdzSFNoQWNQYm0xUUdOdllUMERE?= =?utf-8?B?YnY2dWtHeVFxakxWUE5ZOVhkNTM0aXNKRnRhWk1ZVTVzTkpWVElQSVhuVzVP?= =?utf-8?B?QzdWdTZBQktNcjJFQm1rc0RSMi9va0VzL21ISnN3eXp3MXpHWStpU29EZXlL?= =?utf-8?B?alZUOGY1OTI2ZHJpWWVEaFkya1lCY0N2RzdRa2NmY1ZHRmRoREowQWZnb2tu?= =?utf-8?B?L2M0SWMxNzRuSjFMY3dHbnNrREEvRXIwY1k1bjdaZGtaZElmbXErUTk2WmFy?= =?utf-8?B?cXZnTDRqWDROTUNLSFhjaVk2RkxVaEMzNTNkaDN4WklOVE1Gd0FSclF2OTJF?= =?utf-8?B?cnhkWVNXYXBSbkhjWFZrK0l2R21LT25nZVJIeWsxSXpZZWtvRGJ5cXp4eUh5?= =?utf-8?B?Zk1HSVBickpCYWN4Smt0RU5ncG4xTFV0OFd2Y0xuaGFWMFNHc1FsOEFaZ3BY?= =?utf-8?B?anpXR3I2VXpuYlVPYnJkUnd2bDNFajFNU29wUHpiVXRWRnJjcTRrM1BJZFkv?= =?utf-8?B?eHdtcWtSVXh3V2plZ2MxNTllR0xqY1E5SG5OWE9OanpQQ1ZtU3lab1QvQ3g0?= =?utf-8?B?ck5FUEVwQjA4Q01jNC81K1hYcHRHNmFkY01tUTc2a3djVmFSN1Z6QVVpTGVJ?= =?utf-8?Q?Y2bNJ6MvIDTll?= X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-feddd.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: af880bd2-219b-44c2-346e-08de79f684c4 X-MS-Exchange-CrossTenant-AuthSource: SY7PR01MB10921.ausprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 14:01:23.1354 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4PR01MB6284 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Wed, 04 Mar 2026 at 18:29, Akshay Joshi = wrote: > Thanks for the review, Japin. I=E2=80=99ve addressed all of your comments= . I also added a check to throw an error if an option > appears more than once. > > Attached is the v10 patch, now ready for further review. > Thanks for updating the patch. Here are some comments on v10. 1. + * db_oid - OID/Name of the database for which to generate the DDL. Should the comment be updated? The code only accepts an OID for `db_oid`, database names are not supported. 2. + /* Set the OWNER in the DDL if owner is not omitted */ + if (OidIsValid(dbform->datdba) && !(ddl_flags & PG_DDL_NO_OWNER)) + { + get_formatted_string(&buf, pretty_flags, 8, "OWNER =3D %s", + quote_identifier(d= bowner)); + } `dbowner` is only needed inside this `if` =E2=80=94 how about declaring it = there to reduce its scope? 3. + /* If is_with_defaults is true, then we skip default encodi= ng check */ + if (is_with_defaults || + (pg_strcasecmp(pg_encoding_to_char(dbform->encoding= ), + DDL_DEFAULTS.DATABASE.EN= CODING) !=3D 0)) + { + get_formatted_string(&buf, pretty_flags, 8, "ENCODI= NG =3D %s", + quote_lite= ral_cstr( + = pg_encoding_to_char(dbform->encoding))); + } How about cache the result of `pg_encoding_to_char()` in a local variable t= o avoid calling it twice? --=20 Regards, Japin Li ChengDu WenWu Information Technology Co., Ltd.