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 1wDJ24-002pmG-1Q for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 09:29:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDJ23-005637-1h for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 09:29:07 +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 1wDJ23-00562y-0U for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 09:29:07 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDJ20-00000001I8u-3abe for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 09:29:06 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2adff872068so39361285ad.1 for ; Thu, 16 Apr 2026 02:29:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776331744; cv=none; d=google.com; s=arc-20240605; b=TXhX1sr6xjxMs7pY8YYcsJopzasm+jepJnD/6tK/SMX4E7gdSs+I/2y/xegrBzVJzg CLjnKp1VtWrdhgoevFbDfXXhDYjtEOne8pgsFN5ZiMv5vSBnHTvqjJx3rMDHy3+SGLdA SFtJpqgzKjxq5dCiicpI9ygwP749FDj0ASXaroR90mhTSEpoOFHhkpwhgyW0KFBtveUW /qF6D1enecSWgkcVx7YbbE7FEpaTAAAptZboKVXJ1BgR0I0X1rwRL08VtEWCmQMDRHmw wiXBF9g3YfRhn19BW+yJHa7kBaEO67chn7bmhE3njgzwNElSdj7BY/Hzt9VouxS9k0a3 nlxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=8NgY7fkkUR8XiOBXXslCw+3F9WEvJtRFwQxE8lUBNLo=; fh=0Dg+Jc1CaEO5bZYJfILqgt/Zzp1lp/rzsiy47Ucj7lo=; b=CVu2tbtv79ZzZcACTK+UjmnoPLDvCWTDHd1Dzl/hBptEVi2ZJzfE6EmjdDg9ZesKj3 ZG1krvcCyPI5O+JiBuSFjapFpaVaAkvnBp4U+ucoYjmGBx0/hJDsd27Wg+2IX1T52re4 JWZU0YJENDDGeK98kJpnuB3+gZFcly66SZdFugn8k5BdHMpxA5wI/2tTVqJT7+MXIL7d yiasK9YR5f0jgLrBYrU87kbo9Yyag+h7eD+w5Cue0lPbLvIhPB2AaZt8sRa2K+6VAmt7 IoF0b3Uruvv/92ZWTPeuhXU5p40K6Z1BbAeGAcAiMJ3OURlbZLII2xvcjjNjFS1ALX43 xrVQ==; 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=1776331744; x=1776936544; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=8NgY7fkkUR8XiOBXXslCw+3F9WEvJtRFwQxE8lUBNLo=; b=GPkxe2hvZW5SlG75xWlZDiFzVHGAFfV5EfwU4w5eQsg/tWWS42Xlx2rrj6YLSRaz6Y KRqwnd2RDCok7TeuXF3ujI5uNAzqNUtcUd+/lJNh8L3Ix73IABAhvLjHoHMW6z5kQ1Tg 3joPQfnMVgezGVHeW5k12+5MZAJptA1wd0KxcPycQ6VIXPN6iL8Gk1yhXhBX8D/72R/9 /qasyPFE3bJu0dO5k8uEgc5VKWVV9ZuWkRakYIN16QlXcvqW0+KF7PKVBE0AsWRa126i +q7isdWKvjuS+vm96BO/4YAijPWGQ/oas1HbNFaXOHIxi0fri/jfd4+D5vGHq3GPHBFE eF1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776331744; x=1776936544; h=content-transfer-encoding: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=8NgY7fkkUR8XiOBXXslCw+3F9WEvJtRFwQxE8lUBNLo=; b=IjxlTuOLyTT8RlkQ5TY2gFdvOoon0EuXtvZptwRREkb4kMzyI7eC6vFizGGp839RT6 FWITn8mEVOSWxni6yu7uREoH0eYTol7AobEKBHelYCS5WmRRTq0QdoTROc12hDdYt8On rvtwai1UbJVe0wFDkJIRb+Yi/8Y/VRHo+cwuQGu50Z0m8u2RTFp5OdxxO4BFlMWGuisl 08jqrJUNYPuBDBOlzenvWvToOE+DfXzXPIR59mwVfA1VTEbw3o83FvkJvkyLas2uiINn XOaPW9rv2Bi+7sxPVy+o0Kdp3GPJmnvob3o4pV3LPY+htoYz0x/p8hnDUjRd+9N6KnCh NACA== X-Gm-Message-State: AOJu0YyCOui5uNltJN8EVwGQvJS1zfMhBx87+yLpPzfwyL/MPPfsaqAE BqlhtTd+KoOveMzh+C9w+VVuQfJiHSayJYtMtMWCcNZvCzkyVKTqB+B779IAkddhRCoCnNGqRaa QhEXpod4fOmNLIiPHhl9ARlz+KSpeI4o= X-Gm-Gg: AeBDievN+y3+JSsRmMjyHMD/7MKKJ6NcmlpE4QRM0eYIquMQZeYcqEGocO+rbZ3R6q3 na4o9xMxJDOrKmIcPy0Mcas6XZFoogc91VpPcOB1ObYmoSpwRTrFAUpAWrueFpI3wQW8ifSnQDj VtCHQLqQQaboI/yMXnrfK1WRjFnHB+/I2OOhDUvTew8tcBbY2e0YhMZzTg6UVceKme0Thfkpt1L UTQrP5krd/9gjyZMIfJ3gaAgN2DWMjZEsm8XzTyetCKy77nMUTr3hEkPVRTbBk0zFirPEApKHjr OYfzPKyfpr8hh7bWrvrDR1Nra01ZItopJbHYBGas8sEA1urY8pc/t5tTYa33BUyP X-Received: by 2002:a17:902:8bc4:b0:2b4:7b57:5d77 with SMTP id d9443c01a7336-2b47b5760b0mr40902565ad.26.1776331744097; Thu, 16 Apr 2026 02:29:04 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Amit Langote Date: Thu, 16 Apr 2026 18:28:47 +0900 X-Gm-Features: AQROBzD5j4X6CS8BiNM_sWvevOQPU6BC7ThIXkcE0_4ldZH5x5g6JXnEKSaNxQs 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: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk 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 state > 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. */ --=20 Thanks, Amit Langote