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 1wDWPm-003400-0Y for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 23:46:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDWPj-0074Op-2V for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 23:46:27 +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 1wDWPj-0074Oh-1A for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 23:46:27 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDWPh-00000001O3R-166H for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 23:46:26 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2b25cf1b5f0so342505ad.3 for ; Thu, 16 Apr 2026 16:46:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776383185; cv=none; d=google.com; s=arc-20240605; b=ICshonrxGdtTR/5iukv4ANii20X9FvQvNXUxGBPLHpURaAvD/B4pUKTrdrsnJ1XPDh PtWCziu3CXzbzfCpeSo+TMemA3zSAKauYjfeoHpphwyoEq2FAcc4q5iKB8LITSvXCZ5s CZIVAGHtKVfWgG1Rh2maVjSL7nqIME4Z+dFJiSh7vCTK+TjowugdGnMSSTij6bHmbUs0 QOoSqI+EjInYtJFfUPbBlgsWVfPyJcNL/VnIuD6Jm3ZlWOIJ7RGulrzyfamA5vM0teGL tQ5DZ94COtirmXlVGjxBXkjZVxy/sHplOT7mTXUQyi+X/YSMmIWiqhh3B3ZPv1ZoJw1Q HE3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=1nwguDJUys0JNH6K4+utdz8QSNruU6cHvoPBONOjYBw=; fh=0Dg+Jc1CaEO5bZYJfILqgt/Zzp1lp/rzsiy47Ucj7lo=; b=CxtnXe3dQA8Ghv86POvT8180KqYUSOuz30UL3ggfZEBYvnh76TiruAmu+KBbWcl1Hp V24huw1+AE/mCQFy/asZIf4GlNQV7++n/uoAlrRaQjsUV/JW6dkZOwt1BJ/qfmbca1z7 uqInhKqgWw3xBHuSx4LuaZ5DaTyCacx/kNyITSPgDH1zrF8wlcpG2hBABJM7sNAdWoE6 Ntyr1CynJwUOVa7CCDrobeTDOBPLnWUscetS3ffANebRNs09tZ0+9fSjPlPTrKRLcGL6 /20fIzufqIw2GldL4MGuKo7NRD18PnaYPCof9eZA72f6ZNfB7744Vjgz4ryC0LRRKqJU p/aw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776383185; x=1776987985; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1nwguDJUys0JNH6K4+utdz8QSNruU6cHvoPBONOjYBw=; b=QH4Pa9zbqa2Q2WlYIAVizv/Q9Numqph4r1rSBymClYSF66HR2rIRRzHMtQgIYON0vZ zGF9uxjQHf0sTzPBTF6AsnARYQfPCIahivrs3LAjJtH1YvoOX0H4kXmaJG2/VMVufQdk g4tjzhWPfoPeeFsoAu98ILodkNxbD2uHBEdP+FBJXbGWFW1zQcIpQvFOJNbqoSbvbbFJ POiU2cvOGHETudlz1dWGF0+r2m6B4YWEy0ZJxAh2eq2sV2hZn4xCO8QD1ewlZTAbTzh8 1jeuU9/q7QKaXfRwyRczr0Kzytbe9pBWBWFDkBsitbWi6enGwjAIsxAb09nm2WouXxNJ hd9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776383185; x=1776987985; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1nwguDJUys0JNH6K4+utdz8QSNruU6cHvoPBONOjYBw=; b=o+OpiKVifKv+TsdjvitTEKeqhHGcGU0lajuoVmsI3wezMSB8q19uyb4FsyurBjwyt/ L4gVoQ98uCYdaFSuJRTxTLD51PdsKw8bbX41u1TmfCNwGWHXVbmsocYi6jMYY4iRvThl 721QDpg5htRQ62XDS/FQ6kCeDx6NxSoyEWo6brh4DK8wvDHWd5usIont3jf3iAdWvIMr ZpAAcf09Q49uChzLUSgbemepbiE7ildtFhe/PAOdn+kgLp+U528p74SVz/Cj8X/cJeXv NheE5HJOYnFbCsq1amx4BSFZFynM/jM+qkF8RfYXScXxrn40q+Bm57RjKTneWDU7Mt4w r3wg== X-Gm-Message-State: AOJu0YyPcjeVysAcGLVT2UpsQvftXs6yuI+nJhcrOU9ocTH4gIXhMHkw cX6wUt/TAe08YZ7/uSCPb670luj2Ze/f5DRL7MmeL9oHL+eCtT87BwrAxvIZV+DKpEZkeJPPNgP 3tAxU4+zJvFCs6cFgHEnFumZULkGDjXA= X-Gm-Gg: AeBDiesZbv+zpdK107fUoIxP0J5YAaomBoORjPzDBbFfbcPZhgk1Ls/dXz79EIv4ClR afuKiN+gYS3hU1hh5fvfIxz/9HwKoJ97YYAJkPosVDu+BTf97YTyAA2mPL2tweb9PsRMktov0kp EdLlhYNjJBWDqEzz905UVtMiFA4kXuLpjM4ezAu78zcmFeUpI+YcPFnmIgD9nEHnKJkIYFOrp/9 XF6usc1c5gyTsoXTxBd6uNxoMNpc17D6+hOUdiatTfPD//SCFR51RxFNlM46OUUC4QwjxqNJNsN HZhWgbEirgMQiLcKTFvZlvBdhs0ifOmnw77l7cRfRHunl02IAfKzZaESqObux4LO+gQVys8k30w = X-Received: by 2002:a17:902:b946:b0:2b4:63bf:5535 with SMTP id d9443c01a7336-2b5f9f53480mr2364205ad.41.1776383184526; Thu, 16 Apr 2026 16:46:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Amit Langote Date: Fri, 17 Apr 2026 08:46:07 +0900 X-Gm-Features: AQROBzDSqp9EnpyuBiQHT7n2e9VBlQHYJsuIP-YJMA_kaYhhM062MYy9hIVyv2s Message-ID: Subject: Re: Reject invalid databases in pg_get_database_ddl() To: Lakshmi N Cc: "pgsql-hackers@lists.postgresql.org" , andrew@dunslane.net Content-Type: multipart/mixed; boundary="000000000000b342f6064f9c7072" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b342f6064f9c7072 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 17, 2026 at 1:46=E2=80=AFAM Lakshmi N = wrote: > 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. Will push the attached shortly. --=20 Thanks, Amit Langote --000000000000b342f6064f9c7072 Content-Type: application/octet-stream; name="v2-0001-Reject-invalid-databases-in-pg_get_database_ddl.patch" Content-Disposition: attachment; filename="v2-0001-Reject-invalid-databases-in-pg_get_database_ddl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo24nsdt0 RnJvbSBjYTk4MDg3NzM0ZGYwY2RkZWZkOTYxMGI3YzIzYmU4ZDFiNzU4OTY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IEZyaSwgMTcgQXByIDIwMjYgMDg6NDI6MTkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy XSBSZWplY3QgaW52YWxpZCBkYXRhYmFzZXMgaW4gcGdfZ2V0X2RhdGFiYXNlX2RkbCgpCgpBbiBp bnZhbGlkIGRhdGFiYXNlIGhhcyBkYXRjb25ubGltaXQgc2V0IHRvIC0yLiAgcGdfZ2V0X2RhdGFi YXNlX2RkbCgpCmVtaXRzIHRoaXMgdmVyYmF0aW0gYXMgQ09OTkVDVElPTiBMSU1JVCA9IC0yLCB3 aGljaCBBTFRFUiBEQVRBQkFTRQpyZWplY3RzLiAgRXJyb3Igb3V0IGVhcmx5IGluc3RlYWQuCgpS ZXBvcnRlZC1ieTogTGFrc2htaSBOIDxsYWtzaG1pbi5qaHNAZ21haWwuY29tPgpBdXRob3I6IExh a3NobWkgTiA8bGFrc2htaW4uamhzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgTGFuZ290 ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0ErM2lfTThtMWsyZ0ZjaCt0VTBKbUFRaDlGUlYrcEZyZlRYRHJKbytCcW13c1RtT2hnQG1h aWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgfCAxMSAr KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9kZGx1dGlscy5jCmluZGV4IGM0ZjlmODZjNDNlLi4zOTIxZWQxZmE2YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2RkbHV0aWxzLmMKQEAgLTg4Nyw2ICs4ODcsMTcgQEAgcGdfZ2V0X2RhdGFiYXNlX2RkbF9p bnRlcm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJZGJmb3JtID0gKEZvcm1fcGdfZGF0YWJh c2UpIEdFVFNUUlVDVCh0dXBsZSk7CiAJZGJuYW1lID0gcHN0cmR1cChOYW1lU3RyKGRiZm9ybS0+ ZGF0bmFtZSkpOwogCisJLyoKKwkgKiBSZWplY3QgaW52YWxpZCBkYXRhYmFzZXM6IGRhdGNvbm5s aW1pdCA9IC0yIHdvdWxkIGJlIGVtaXR0ZWQgYXMKKwkgKiBDT05ORUNUSU9OIExJTUlUID0gLTIs IHdoaWNoIGNhbm5vdCBiZSBleGVjdXRlZC4KKwkgKi8KKwlpZiAoZGF0YWJhc2VfaXNfaW52YWxp ZF9mb3JtKGRiZm9ybSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiY2Fubm90IGdl bmVyYXRlIERETCBmb3IgaW52YWxpZCBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCQkJZGJuYW1lKSwK KwkJCQkgZXJyaGludCgiVXNlIERST1AgREFUQUJBU0UgdG8gZHJvcCBpbnZhbGlkIGRhdGFiYXNl cy4iKSkpOworCiAJLyoKIAkgKiBXZSBkb24ndCBzdXBwb3J0IGdlbmVyYXRpbmcgRERMIGZvciBz eXN0ZW0gZGF0YWJhc2VzLiAgVGhlIHByaW1hcnkKIAkgKiByZWFzb24gZm9yIHRoaXMgaXMgdGhh dCB1c2VycyBzaG91bGRuJ3QgYmUgcmVjcmVhdGluZyB0aGVtLgotLSAKMi40Ny4zCgo= --000000000000b342f6064f9c7072--