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 1wDYBy-003630-0f for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Apr 2026 01:40:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDYBx-007RNG-0u for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Apr 2026 01:40:21 +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 1wDYBw-007RN8-2X for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 01:40:20 +0000 Received: from mail-australiasoutheastazolkn190100000.outbound.protection.outlook.com ([2a01:111:f403:d40e::] helo=MEUPR01CU001.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 1wDYBu-00000001Oon-27EJ for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 01:40:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GAFMhoRCSIaEJf3bT0/rpoOXzLiYAPP6CJURK7WKusOD/HUPZuvecm3S1re0CFfWZnX53/ndMaYPEj3tSuw6k2WP/dvVaGpMhtOWO3cBwM9bqqvZX0dmRx9WYvNnkVQ56dXbvU1S8dui0uYeeZSORP5P45/I/8LafZKTHVWJ0Mx+bev/TvTQIUtOfJGiOfJ/nULgxgzzZ56dUAZvYODiJMChEFOa2VLvv0arMAUWWy9y/XAtzgfkegxoLqV/wPBXnyp3UrBZg2BCZFIShRKSgMhGfbmEHauBQkZGM68q0xabVXERGcNCyqmY9fmB7kJZfwbIt8waxw0l5AWUHWPXxw== 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=dIX4WyMnPMP/YNprORIRBMibx+uX7f74J45xuCUR+pQ=; b=On3Nl4T+bZlsriJ1jffnvpWMHWQygvbKFc5CLldj9dTRDNV30GxXOO5HDybOI6dO+1YVTG4Wp6VvRoroanrqtmNHquaChhGbhiFtylnkF5CVcPnj/if67DjZ55iC8l24nPSVnjniyhYyfBb5pyqBdaeiqZeDCPh3fm5CM/Y6AZltVqcCMnhdGXebU4kzNshA5CfgGbWVrZDmmSZifGA3zY6VYEoTvZ2IufuTuI9SYdQmuoe7W4KgDw0GcddSmOfjL3HL0mQDBuRyfuw1crXNS5r8AN89O3X5WyuOgjjyZBELE1VRYkxuUoPGiVqeJ2IjhNAc2OWZWXEpPzjJ/bq4Ew== 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=dIX4WyMnPMP/YNprORIRBMibx+uX7f74J45xuCUR+pQ=; b=ljV92Uv23Wo/jADqi3GadW83joi6hCeab0INNF0YD6xWv8Jqs7btz9lgsIK/Py1fSsHFgbbNZ+pFZetAIGvLdSJ9sfSbQJ2eFEC4PUAKOajUN/M89z66eptVbQpBf6DmFktBxlK1EuU3Xe2NKeZOCb0UKrQCLFyt5BJq9FCql3zsFxPMoGQq4MhKZk+ZmHPI7avHEGHz0GW0TuBj/PAQCOjmFDh40mlNMtRBuewv6kMCMh2sRdVieVVQ6A0yqX920zjqvV+iyXo7BS1iLv8FqILUl6hy8vj+iljjZL3TZXfVQQEmSerbGAvHygJpDahF5u71XiROetVHBP/RcwFz0Q== Received: from SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) by ME3PR01MB8260.ausprd01.prod.outlook.com (2603:10c6:220:1b4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Fri, 17 Apr 2026 01:40:11 +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.9818.023; Fri, 17 Apr 2026 01:40:11 +0000 From: Japin Li To: Lakshmi N Cc: Amit Langote , "pgsql-hackers@lists.postgresql.org" , andrew@dunslane.net Subject: Re: Reject invalid databases in pg_get_database_ddl() In-Reply-To: (Lakshmi N.'s message of "Thu, 16 Apr 2026 09:46:45 -0700") References: User-Agent: mu4e 1.12.12; emacs 29.3 Date: Fri, 17 Apr 2026 09:40:07 +0800 Message-ID: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0258.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:455::6) To SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) X-Microsoft-Original-Message-ID: <87bjfi74aw.fsf@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY7PR01MB10921:EE_|ME3PR01MB8260:EE_ X-MS-Office365-Filtering-Correlation-Id: 4584361f-a50c-4503-315f-08de9c2243c2 X-Microsoft-Antispam: BCL:0;ARA:14566002|15080799012|12121999013|23021999003|8060799015|5072599009|6090799003|461199028|19110799012|24121999003|22091999003|24071999003|39105399006|20031999006|440099028|26121999007|3412199025|35041999009|40105399003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?c2ZIRW91dFFoK2VtSEdOaUtrU2RxT2lxOExTVkpXRmZvRjd6Z2VDU3ovWW1n?= =?utf-8?B?b1kxQXZ5QVYwZmsyMCtIeG0rRUJFUTcrbTZJM3VvYy9acjNDdDd3cGFTeUR0?= =?utf-8?B?MnZ1MnBJR0FkaVJoTjM3YmpuM2wvU292dGczdHBoUHU0cEEyc2x4N2JiNzN5?= =?utf-8?B?aUlUdEhhYzJzN1ZXUThFblNQUUtNMXY4anVnckQ4ZFY1WGFXL25sa3NESUtq?= =?utf-8?B?a1NOK01xWTR4UnBtcnlGOWg0OUZvNndybW9TVzdtbC9JZ01EOHpQR1RRQnV3?= =?utf-8?B?K2xYb1gyTUN1RHBROEJTM2ZCT0duVThpRFpjdngxdDUxQ2diRlUxNG1qQ0Z2?= =?utf-8?B?TTBiK25nVFVORHNqWUVGYVViWWtHVDhVRFByN0pCS1NpNkVTUzJ3RTljdEZr?= =?utf-8?B?c2xiMmp1aHhiYmV3WVZ6WmVwdmp3N1pHV0hFSGQySWJZSDFyRDR1RElOdFVz?= =?utf-8?B?NCtxRk9FVlN5ZXBMbHhRRjd4WUpHSkJnWFdVQnhJVHUrS2Y0K3lBdDVCalJP?= =?utf-8?B?RE5taHdlMjlyZW1hRU1vRklka0g3Nmo3U1g5MERJY1hsRjFpWnNHcWFaN0pN?= =?utf-8?B?RUwzTVcrUXppQTNDenhTZXRYSXUyMjIxMUMvSGxTUXQ5SE90V0J5d3lpLzJx?= =?utf-8?B?a1lTV2lLS29ZTVJWOUloTURqTVE4aWprTnNoL2M4cFpORUFKZGhYdGJHYkU0?= =?utf-8?B?cG4xUFhrUmVFc0IyV3VJNnJYeUszVHNmWXFCVHB2OWNjZ1J1S0dxb0VaM2s5?= =?utf-8?B?V0F4NVdkTlAveldsTHRCbmlEQTllNWRMSmQxRHczR2NadTJ0MjRKbzJUc051?= =?utf-8?B?QUFvU2dIQ0ZLbU8vVE1pNkdaT2dUSEd4QXZkWnZFY01IOFhHaTBqS3Buek94?= =?utf-8?B?RnlxNGsxUm5aMmZ1eHl3RWZHRHNHR3liS0hqbkpWMkVmaXZ4VUxEd0dlVXlX?= =?utf-8?B?MmcxU0Q1S2tKb0ZjWnRkN2RYdmR1MG1lUlBtNGg4Vm1aakJLZTB3RFl4VjA1?= =?utf-8?B?OTJWV1ByMEM2cUpVVm9udFRySThOcjVzSGZyNFhRQkszMVU5Zmhrdm8ycVZX?= =?utf-8?B?cEFkUXZZSzVjbVROUGxuUWFVd0NqaFdTOEZtektyd2Vsd1RyWi9GMFY1NmZR?= =?utf-8?B?VkZjeUlQM3ZMRU1GVEdBSEFvdDVOb1BXUWlMZkFEQnlqMEFGQXk1NktsQ3M2?= =?utf-8?B?eUYwaC8rYXBVQUVWUTBHMGNIUmg2empLRTdaMVAzVWlXMVh3MFh1NkJDaUw5?= =?utf-8?B?cElnTCtVWTFyL3JaeFZpdFBHT05mQUxXVHF4eEUyS0szbFRyRHRHdlhTQkNE?= =?utf-8?B?bWlPajVvTkg3Wmppaks0bExPRkdKc2hnT1BzS2xMRkE4cDMzRURvcWwvZEpB?= =?utf-8?B?c3I3VjM5S3ZjNEpEMEFQOFp5V2VrYUErenJOemU2Q0MrNDRNdHkvTytnam50?= =?utf-8?B?THVZMUNrUUMvZkpKOXdadXhFOUYydzU1TGdINytnTktGaFRKc0o2akdJR29X?= =?utf-8?B?SDRKa3pvakp0RDA2U01CRms1U0FlaVZIeDVMdGZZMThWY3dOTklCUkNRUkRm?= =?utf-8?Q?5W4Uo/itl0147NCcKoNkmoPJE=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aFV1Z3A1NFd4aFFxSjdxY1p1WEhWaDc4Wk42YkFzLytVclJOcm1HQnZwRWhS?= =?utf-8?B?TlJvV0hSK2JDYUxEbTZ5ZGVBUlhETWNWL1hKemVRdG1LNHlrZ1VHOUFHT1Zq?= =?utf-8?B?U2ZkMDJEellJWjlGK2VRcDY5YmZOU0JRQ1ZBT0VubXJ0MEJaV3J2aTlwSjRh?= =?utf-8?B?TTBBa0h4NmI3RlpjdnBNV0Q2cGtjT1JyWVVXb1NKdGhrYUJDTGZwVUNQQzlQ?= =?utf-8?B?T3NUQ21yU0tYVGlOWUhTNkRXcm9KdTdHc0U2YVE3MmsvWTlDa2ZKZjFtWDZw?= =?utf-8?B?SmZ5VGMraGNHTlcrNllUcUVTQ0ZlZ1dWSnJtaG5tWFJ0MnFnc0NtOHdZWlZo?= =?utf-8?B?MFF4ajh1cDRqTy9sOGIwZklYWUMwalFmN0J3cWpGdjVMM2ROZC8rRzBSRVQ3?= =?utf-8?B?ZitSWjJiOGtGWlkyWmtSUkMvQnFDSC81VmIxMkkxcGxNVGVwL3BONjFIMWty?= =?utf-8?B?THl4RXpvcUZLU3kwSUh2UnVDTjR1SzZOcXBHM0NnTm9WODNpU2FJNHorNHpI?= =?utf-8?B?NGwwTnJaOUpiZ2VrSU5IMnRuZG1EbXZmaFBPOFVsVHpOc2FsSFBnc2dSK0RL?= =?utf-8?B?VFpkS2RtcXVjTnhFWExOWjhUS2VaaVFsTHlsa08rU0ZNNXNWZ0FQb1BoSUhL?= =?utf-8?B?eVBsQjlKWHJ5ZjVVNGt3Vy84dHBVZGgvRWNEMHNObkxxZFBDZUU1MFk5dTJt?= =?utf-8?B?NWR0SFYrWE5RcTNxbkVnOVVzZ2NmSVBtZkNvY0VydXRSSnE1Zk5ZSC8rV0la?= =?utf-8?B?NVFoVC85WWtrbjdSMHprSHlKOTI3N0ZHaE02TG4yTS81UE1DRnN6bVNJNHZZ?= =?utf-8?B?S2dFeno0U1F5a3l6aFdWR0NVY2xxK1Vxbm1KUG5mQ2FaYm9yZXlzYi80U1dI?= =?utf-8?B?Nnd1MzBFUlFPL0dqcWx3eGFRc3lDMUc3WnMwSFUyeUVpSjBBa1pkZEt5akVB?= =?utf-8?B?L0FvZ3BIMnRFbzFkRHB6c1YveERuZzRXbkdrMVZ4ZlVoMVZqZ3d6cE4xZTNG?= =?utf-8?B?RStEL2FVMUt1c1A0cWY1UGIvQTRPQ0E3ekNVdGNncCt3NThkWEZNdUhvYjlj?= =?utf-8?B?Y2xBRVdMWjN6WEtndHV0aXNIdzJRMFRKYVBEblkyWHFGbkdNSUllUEhzTUps?= =?utf-8?B?Z1V3OGZMdHdwcVBxQm1ROWJDdFVnV2p4dTZFbmdmTFVXNUh6ZFFGRDU2SEl5?= =?utf-8?B?b2lrY0Y5dkV4R0xtbGZ1b0VPdnFXb2ZuclAvWXZ2RmYrb1dweXZQbjBjeEtu?= =?utf-8?B?bXpxd0VIZjY5dFhHSTN5OEpaNHdWbDVlSjdyK1AwekU3b1NUZHNGaXI5amE4?= =?utf-8?B?eGNYeWpKWVdUUldGOGpNeUVwUlEzdFBhSWYvT3NrdFAxT3JQZWxhemlJYzQ4?= =?utf-8?B?bVJ3VXhubG1OdjQ5YTU5c0d5R2lDUElDODJrSFlUdWozQnJxcC9IUW1yUzlC?= =?utf-8?B?NjYrNHZmZklPLzE1MVliR1RUTlVaTm1KbUgyTzlINkNsL0JKdXIwRDc5WVll?= =?utf-8?B?MzVIZm5SUDYxWC8vRnhZdEJ0TkpSdVB5QmdJWmw2ZW5mM3dwemZ6UXlTa2Zn?= =?utf-8?B?bnYrTEFvYjc2V25naTNJdDhKM0RwNm5oekw0N2JyTHB1SldMS2RFUGhQOFF4?= =?utf-8?B?LzRCWWU5aVlCRGh2NjRyaTRLL1J4dUpyRlh2TktpZ1ZBVDNTSWhST2RaK25s?= =?utf-8?B?NjFCQlZwblU4Q0srMjBDMy9LL2RGZnh1YkRKdHE2bEtvVFZwTGdIZ1VxQkpD?= =?utf-8?B?WERWK2RaTEdTVG5udk5BZWx5bmNxY2J1WEpWbDVKVTZWZ0Q2SzllOHoyMmhM?= =?utf-8?B?bW9BZm9UT29zS20yYllkczFSZStrQmRwNXA4dnpURG5WamttNHVjQ0RBeFJh?= =?utf-8?Q?m/LfFDJmp0yOJ?= X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-feddd.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 4584361f-a50c-4503-315f-08de9c2243c2 X-MS-Exchange-CrossTenant-AuthSource: SY7PR01MB10921.ausprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Apr 2026 01:40:11.4268 (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: ME3PR01MB8260 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, Lakshmi On Thu, 16 Apr 2026 at 09:46, Lakshmi N wrote: > Hi Amit, > > On Thu, Apr 16, 2026 at 2:29=E2=80=AFAM Amit Langote wrote: > > Hi, > > On Thu, Apr 16, 2026 at 5:20=E2=80=AFPM Lakshmi N wrote: > > pg_get_database_ddl() is not checking for databases in an invalid stat= e > > before producing ddl statements. This caused the function to emit > > CONNECTION_LIMIT =3D -2, which is invalid SQL that Postgres rejects. > > A database row can be in this inconsistent state longer, for example > > server crashed during a drop database. > > > > Attached patch to fix this issue by doing a database_is_invalid_form() > > check early in pg_get_database_ddl_internal(). > > Thanks for the report. > > Hmm, I see that the function will happily emit datconnlimit =3D -2 and > your patch catches that at the top instead of down below near this > code: > > /* CONNECTION LIMIT */ > if (dbform->datconnlimit !=3D -1) > { > resetStringInfo(&buf); > appendStringInfo(&buf, "ALTER DATABASE %s CONNECTION LIMIT =3D %d;", > quote_identifier(dbname), dbform->datconnlimit); > statements =3D lappend(statements, pstrdup(buf.data)); > } > > which, I guess, makes sense. > > The comment is correct but could be more explicit: > > /* > * Reject invalid databases: datconnlimit =3D -2 would be emitted as > * CONNECTION LIMIT =3D -2, which fails on replay. > */ > > Thank you for reviewing! Please find the attached v2 addressing this. > Thanks for updating the patch. Is it possible to cover this with a test ca= se? > Regards, > Lakshmi=20 > > [4. text/x-diff; v2-0001-Reject-pg_get_database_ddl-for-invalid-databases= .patch]... --=20 Regards, Japin Li ChengDu WenWu Information Technology Co., Ltd.