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 1wCNAL-001urJ-1m for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 19:41:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCNAH-008ZpH-2b for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 19:41:46 +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 1wCNAH-008Zp8-1J for pgsql-hackers@lists.postgresql.org; Mon, 13 Apr 2026 19:41:46 +0000 Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCNAF-00000000qvg-3nQu for pgsql-hackers@lists.postgresql.org; Mon, 13 Apr 2026 19:41:45 +0000 Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-56d85881a68so1627056e0c.2 for ; Mon, 13 Apr 2026 12:41:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776109303; cv=none; d=google.com; s=arc-20240605; b=QyWFcd2FKUGaaGe4BV9zGBnLcY/u51T8rmHgKDDXiqP97x8VBVGt2UUV1r8d3WBYNO SGU6KO+KDBKmBB5puMxVX2Qywon5nXUCmYNv3MSqegX1vVztaWxyhcy1JTlSN8A2vzjq VvHwAUodS4X83J1HezaJfxvNaUF3FYlfjuKodU++/yacza7RQQiaBSOt4qjDsr85c8aK CUMzNxuB5hG1SqZxAj2qdv1nJh1HJS759ZHxdiLy8xwf7X0Ut+fZynxmSFVCVAXZwcjy EIEXAyJfzVXFOTBh/XAk4dGS+GQsVoZn0wNDLzB09dDJzPbWk6fEzY1QHdiBGRAkidpr zfyw== 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=MZXFri2By3yetjbEHeuoZ4qQEWZPxw8a8RMYui077u8=; fh=XazrAs1rcJS4mpgEkp7bQT7ier3m/ZM9+ADFQOsQr8U=; b=F/ux/d2H42kMTH7IfwFNe8u+znqeWtwLxpiJiqBKvBW0MEsmQQ4bbO5UmjvJYeTqWF 6E0TrBpn9s0DfPfULJo9/HSnrQWESwH4poXXk3ixOQ7NKDoweDXnjT973J3bp/2axdwt R+Fz4OjbLzx5/qWPpHq06+Eq1LOPZFBE0suO7ZNkTBhvLvs+/cb/EqoH9PtdcX2+Zu/H fK6ypYAXzDdtz2v5WlpqmIOLKFvpDuc0+AHNySpuko7YvAzH2i890PkjsCZifpG3yEnJ gPSpOxC8u3FMtJ0D+AWSeKLBNlQrae/3S7+BLXtbPZJ5T89ZL75yIy8QGY8/mrlw59bm wsfA==; 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=1776109303; x=1776714103; 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=MZXFri2By3yetjbEHeuoZ4qQEWZPxw8a8RMYui077u8=; b=sdJWhv7zXBGoA/nFTwvvSfWvVyKf60H1e4395JDju8uh7+EG5lnHfA7WQRnCBZ9HCj TTnhh/h5nztk+uQnRKv5fnnsU3uDFCtwvdqugtxd+5kyEKFlZpvpQlb9qIjfR4ER81L+ 3GhC9mKymrMfw17vBJ9ooKG86JGGZ4NYQKU9aB1sxeiC1XKhy9gTE0inwOX7BR5n+80i Oio86H2UNyz8O7t+hGT63VxUFCXaBLqIqK0XUkB8zOD22NmZXXYQpEZOXMvAA6bh9azq 5AepbzbNdU94V4A0/S614RB9g0F9IJUdh9jPfC/R5QeymzpfjoztQ6nXWevLjC6s9A95 gSNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776109303; x=1776714103; 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=MZXFri2By3yetjbEHeuoZ4qQEWZPxw8a8RMYui077u8=; b=CU5OMwg1ffi5izACyC0bGhsxyk4jJnbp4vIVFbOfURq3flM0maavyCPz7hW+Te0hzZ At/0PknpihWuEQezUvd+zcEMLUWmcZIPCX3KMqssCdZpDRH2PK/v/Rsn7mYnOhmjkbQD c9qSU3IUBjk8Tj+L8bmkoBfpy338vcv4dfk3gJSWTc7zr9vgBfjG75D9yJQfsGPTueTc UNWgtHB4eeVLSQCGC1O1IvAu6WI1w7y+FpwdX7P5onLQECUolQ4ZYhwUsn7yv3GlTXp/ 5arNlFQiezxbQQbczPnkMOqaX/fAO5n++onnr5uSMKNTruLoCHLjeKnqjhfll9RoFYNt W3CA== X-Forwarded-Encrypted: i=1; AFNElJ8n+V7+5Oj5BVXTKP97BXG55//+mBK3T+/Gf29WnCZHLmEOblO1IXYW29rxD8UvADNmEdiyoING+t8oK/DF@lists.postgresql.org X-Gm-Message-State: AOJu0YyOKIPBa22QhdO9yM4u/XcUVJ7y73E0z+ZlCaiNhgj67FWe1EpX el0JODZ5zqi+k0TPSAyX/mk9+Iije/EOmVl1n2OFzZ5ZIsCzXBVjepeeDLpUaBcvD8EZJW8QPQ1 w9B7mxla9rxTQ2p7z2oEXvxvFlqHiCfY= X-Gm-Gg: AeBDieuxcAIsPVecwQdfK7sq8Y5Hy2J2FFK/HicJS0WRmQW0hO6x9FCed+leAws253p N0+UzmzGime+S3c3CUDysA5vDsW8hLoIkIES3qNHqo6luG0XhbUZwvHOIvOUgHI9Wu5J/+g25Nq 6zSoDUeLHaSWg59PSYoKc0IXU6RtrsFekyK0c31xODef847wEq80vzGtUuLTXw/IwPxTPiCwS3i oHdyo4bRQ7oZ1YKK9iyoBpJcVIcBX0Y6HYjkBodYa9jIcD7fYW65oClNEoVzhqrVzow3z8uTGuF 9Pm3j06kUZIJDijzoQ== X-Received: by 2002:a05:6102:3e92:b0:609:5643:e9f2 with SMTP id ada2fe7eead31-609fe5840dfmr6084325137.6.1776109303307; Mon, 13 Apr 2026 12:41:43 -0700 (PDT) MIME-Version: 1.0 References: <202603201311.yhtqmvektawm@alvherre.pgsql> <8ec9b67d-939e-4b22-8d56-a5129f92d32d@app.fastmail.com> <555cdee4-c024-4872-9d96-82ef4216239c@dunslane.net> <4efc426cde8eed9734af3a4552c3be29188f3661.camel@j-davis.com> In-Reply-To: <4efc426cde8eed9734af3a4552c3be29188f3661.camel@j-davis.com> From: SATYANARAYANA NARLAPURAM Date: Mon, 13 Apr 2026 12:41:31 -0700 X-Gm-Features: AQROBzCgr671AyHPsUoaiyDZMbaCZGMjjAYJvyj76VdFhwgeOU0CXWXs-sSEGVc Message-ID: Subject: Re: pg_get__*_ddl consolidation To: Jeff Davis Cc: Andrew Dunstan , "David G. Johnston" , Japin Li , Zsolt Parragi , Euler Taveira , =?UTF-8?Q?=C3=81lvaro_Herrera?= , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001b5b31064f5cac8c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001b5b31064f5cac8c Content-Type: multipart/alternative; boundary="0000000000001b5b30064f5cac8a" --0000000000001b5b30064f5cac8a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Apr 10, 2026 at 1:03=E2=80=AFPM Jeff Davis wrot= e: > On Sun, 2026-04-05 at 11:06 -0400, Andrew Dunstan wrote: > > Pushed. I have moved the remaining get_*_ddl items to PG20-1 > > The line: > > role_settings =3D DatumGetArrayTypeP(datum); > > should be DatumGetArrayTypePCopy(), because it's being pfree()d later. > The existing code will sometimes make a copy and sometimes not, e.g.: > > -- settings are contrived to make the datum inline > CREATE USER u1; > ALTER ROLE u1 SET search_path =3D 'public, pg_catalog, pg_temp'; > ALTER ROLE u1 SET work_mem=3D'64MB'; > ALTER ROLE u1 SET statement_timeout=3D'30s'; > ALTER ROLE u1 SET lock_timeout=3D'10s'; > ALTER ROLE u1 SET idle_in_transaction_session_timeout =3D '60s'; > SELECT pg_get_role_ddl('u1'); > ERROR: pfree called with invalid pointer 0x7986dd0c7cc8 (header > 0x0000400600000000) > Yes, it appears to be a bug. Attached a patch to fix this. Tested with the attached patch and don't see server crashing after that. postgres=3D# CREATE DATABASE crashtest TEMPLATE template0 LC_COLLATE 'C' LC_CTYPE 'C'; ALTER DATABASE crashtest SET search_path =3D 'public, pg_catalog'; ALTER DATABASE crashtest SET work_mem =3D '64MB'; ALTER DATABASE crashtest SET statement_timeout =3D '30s'; ALTER DATABASE crashtest SET random_page_cost =3D 1.5; SELECT pg_get_database_ddl('crashtest'); CREATE DATABASE ALTER DATABASE ALTER DATABASE ALTER DATABASE ALTER DATABASE pg_get_database_ddl ---------------------------------------------------------------------------= --------------------------------- CREATE DATABASE crashtest WITH TEMPLATE =3D template0 ENCODING =3D 'UTF8' LOCALE_PROVIDER =3D libc LOCALE =3D 'C'; ALTER DATABASE crashtest OWNER TO azureuser; ALTER DATABASE crashtest SET search_path TO 'public, pg_catalog'; ALTER DATABASE crashtest SET work_mem TO '64MB'; ALTER DATABASE crashtest SET statement_timeout TO '30s'; ALTER DATABASE crashtest SET random_page_cost TO '1.5'; (6 rows) Thanks, Satya --0000000000001b5b30064f5cac8a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Fri, Apr 10, = 2026 at 1:03=E2=80=AFPM Jeff Davis <pgsql@j-davis.com> wrote:
On Sun, 2026-04-05 at 11:06 -0400, Andrew Dunstan wrote:<= br> > Pushed. I have moved the remaining get_*_ddl items to PG20-1

The line:

=C2=A0 role_settings =3D DatumGetArrayTypeP(datum);

should be DatumGetArrayTypePCopy(), because it's being pfree()d later.<= br> The existing code will sometimes make a copy and sometimes not, e.g.:

=C2=A0 -- settings are contrived to make the datum inline
=C2=A0 CREATE USER u1;
=C2=A0 ALTER ROLE u1 SET search_path =3D 'public, pg_catalog, pg_temp&#= 39;;
=C2=A0 ALTER ROLE u1 SET work_mem=3D'64MB';
=C2=A0 ALTER ROLE u1 SET statement_timeout=3D'30s';
=C2=A0 ALTER ROLE u1 SET lock_timeout=3D'10s';
=C2=A0 ALTER ROLE u1 SET idle_in_transaction_session_timeout =3D '60s&#= 39;;
=C2=A0 SELECT pg_get_role_ddl('u1');
=C2=A0 ERROR:=C2=A0 pfree called with invalid pointer 0x7986dd0c7cc8 (heade= r
0x0000400600000000)

Yes, it appears to = be a bug. Attached a patch to fix this. Tested with the=C2=A0
att= ached patch and don't see server crashing after that.

postgres=3D# =C2=A0 CREATE DATABASE crashtest TEMPLATE template0 LC= _COLLATE 'C' LC_CTYPE 'C';
=C2=A0 ALTER DATABASE crashte= st SET search_path =3D 'public, pg_catalog';
=C2=A0 ALTER DATABA= SE crashtest SET work_mem =3D '64MB';
=C2=A0 ALTER DATABASE cras= htest SET statement_timeout =3D '30s';
=C2=A0 ALTER DATABASE cra= shtest SET random_page_cost =3D 1.5;
=C2=A0 SELECT pg_get_database_ddl(&= #39;crashtest');
CREATE DATABASE
ALTER DATABASE
ALTER DATABAS= E
ALTER DATABASE
ALTER DATABASE
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pg_get_database_ddl =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <= br>------------------------------------------------------------------------= ------------------------------------
=C2=A0CREATE DATABASE crashtest WIT= H TEMPLATE =3D template0 ENCODING =3D 'UTF8' LOCALE_PROVIDER =3D li= bc LOCALE =3D 'C';
=C2=A0ALTER DATABASE crashtest OWNER TO azure= user;
=C2=A0ALTER DATABASE crashtest SET search_path TO 'public, pg_= catalog';
=C2=A0ALTER DATABASE crashtest SET work_mem TO '64MB&#= 39;;
=C2=A0ALTER DATABASE crashtest SET statement_timeout TO '30s= 9;;
=C2=A0ALTER DATABASE crashtest SET random_page_cost TO '1.5'= ;
(6 rows)

Thanks,
Satya
= =C2=A0
--0000000000001b5b30064f5cac8a-- --0000000000001b5b31064f5cac8c Content-Type: application/octet-stream; name="v1-0001-ddlutils-pfree-crash.patch" Content-Disposition: attachment; filename="v1-0001-ddlutils-pfree-crash.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnxllb110 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggYjE2YzI3N2QuLmM0ZjlmODZjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtNDgwLDcgKzQ4MCw3IEBAIHBnX2dldF9yb2xlX2RkbF9p bnRlcm5hbChPaWQgcm9sZWlkLCBib29sIHByZXR0eSwgYm9vbCBtZW1iZXJzaGlwcykKIAkJaWYg KGlzbnVsbCkKIAkJCWNvbnRpbnVlOwogCi0JCXJvbGVfc2V0dGluZ3MgPSBEYXR1bUdldEFycmF5 VHlwZVAoZGF0dW0pOworCQlyb2xlX3NldHRpbmdzID0gRGF0dW1HZXRBcnJheVR5cGVQQ29weShk YXR1bSk7CiAKIAkJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihyb2xlX3NldHRpbmdzLCBURVhU T0lELCAmc2V0dGluZ3MsICZudWxscywgJm5zZXR0aW5ncyk7CiAKQEAgLTEwNjAsNyArMTA2MCw3 IEBAIHBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJldHR5LAog CQlpZiAoaXNudWxsKQogCQkJY29udGludWU7CiAKLQkJZGJjb25maWcgPSBEYXR1bUdldEFycmF5 VHlwZVAoZGF0dW0pOworCQlkYmNvbmZpZyA9IERhdHVtR2V0QXJyYXlUeXBlUENvcHkoZGF0dW0p OwogCiAJCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oZGJjb25maWcsIFRFWFRPSUQsICZzZXR0 aW5ncywgJm51bGxzLCAmbnNldHRpbmdzKTsKIAo= --0000000000001b5b31064f5cac8c--