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 1vr0pK-004woJ-20 for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Feb 2026 21:35: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 1vr0pH-00GMFR-0U for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Feb 2026 21:35:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vr0pG-00GMFJ-2l for pgsql-bugs@lists.postgresql.org; Fri, 13 Feb 2026 21:35:46 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vr0pE-00000000YJX-2DsR for pgsql-bugs@lists.postgresql.org; Fri, 13 Feb 2026 21:35:46 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b8fa79b9fcdso224497966b.0 for ; Fri, 13 Feb 2026 13:35:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771018542; cv=none; d=google.com; s=arc-20240605; b=jJhtkw+YwkqXIFf85kciJK4edaJ+Cruragwbm3iSbLDQi7QD9G7T9HL+tpR+sCnzVm 0A8UhT5BGm6TDIxHQf4hQsWmtvuCjdoZNLOLyDrtjo5u3HMYL9UqZ50pm49uAsT4x4i9 eJEh69Ck/CQMiT6Mw3gMTc9CBUNtcERSJ1L9iMAl7rVToHLmHN2ztmA4NH+28gyt1kaX eI5L+SCF8GZa/fu7yaL+LtPh/Lg9zlMG2oGevCrT1qUhZsFX8NZHJV0qKpmRb6ZrAsWD kpWPSMU8zaKbYmw8SNforK98VE+Ra8vx6chqi3yf1YvgF6Pef6TRDv8Be9NudWQvSkEi Of7w== 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=M2KxFxFmdzCgNOo5Egj56ZXu5vbjhLQ8HTGHQa1DDks=; fh=8T3l+CMsrN3nzTSFFTIXAeEbfn8ilE/pkVCWClxttK0=; b=U2Au1q91scW522Xe8xafBeqsJ3MAXhs1qYWb9kRkXbvMedecEIKdF4af2NIzfev7qu aKXTMFQAhVTs5BxR8HvCFcPh+l8nzoUg8yQLUX7z1pRdObGoB8aG5ji5Rk23jum5zfs4 IBeOr7krD7YJYL8S5GuL2FlQRjZzw/I3XA+DLItq8d58D50fgxg1DiLCirhGcneNSkST jFjmiO8i4X+33rsF0UMDoaT7VtvFGdlNB/kT5PxEZM1aNfH/BZQaDy7UBC3yPHqMpRKF t+y/RzxVMUWu5eSM/6YdeqgTfQd5tMfwSNRihJzwZF0A5KQYtR+VxsRw6rudRg4Bjk1u lwnw==; 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=20230601; t=1771018542; x=1771623342; 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=M2KxFxFmdzCgNOo5Egj56ZXu5vbjhLQ8HTGHQa1DDks=; b=PHulCaQDw0m+czPLd7yrELiCWnXM+oOLTxCELRwyAmWUGOTGzufCI0l7U+v06oYT/j Rlpafgh98WKPBvUgVCYoBwpuP30I/VZThb4VnDDDJNQlOBD6RckyJMugRQwJVAIlgWWy uaNCz/1lRqBYUKh9LNkBJaPA5bX/Bypjj4i9WedFjQziS2ndwZ9zi7AY9YdO3rTQqOs3 OQ7AOQQ2n/RRiTSsQb6Ox8RBoCZrFgvQcxZEbekZY3nYR9q36zGPNfeKl7B9MF6kYiSP gtfpVeVb88f11y2GesEeEJTehtTVqnF8AEatXqBOhGeehT3eTwfrfKA1vNhsuoz4S88p ByEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771018542; x=1771623342; 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=M2KxFxFmdzCgNOo5Egj56ZXu5vbjhLQ8HTGHQa1DDks=; b=XSRoO8hRlvAKCQZv3e2ekPahe2CD1Q0YQgQoSzQEXgQL7F1ujeNC7HqAYxbShpr5O/ ikNaoX6Shfe/xh46AOnMd3YFhFk8mkIjictHbJ4YirUTCVFm+GeuM1ya9PM5aN7FjXrW afKIfw11cqEz54EjZA8TjAEmuGNrFLXz1KAKAWMzbNszXvIqG5mLZbxVOqxj6xZMaBPT JzqBjhzx6ayVHA0p78fymD9LW/sJk0ggdZoVyK+7ItFbpRK2ifLZHkwdYlqpxwGLNaYw Zs1R9OCqcfWh7UqgtgBuMaXj+3VjXL4hXOepEDnLagupFlj3PtOSWDyNSOfv7SUzdpJr 8fRw== X-Forwarded-Encrypted: i=1; AJvYcCXM5+wv8lTt4oDd9rAiQIaNINNmDZBpcpXyK0kmozTY66yriC0/IviAPhY3jfRjXU1FBJVMogaaqkng@lists.postgresql.org X-Gm-Message-State: AOJu0Yypli9IPK+aZaJ+h9qt/feEDthoZk64ho4VVBavBS5nDByk862f LpWBkuxeUfFGzFRuMBDotvwWugXlPFek+rIOD02USKimlmD2EuSXSe9rOkvw20wOdQO2Mqx5Qkr ZeRdH7LYB5e1w4eDf8TSADi1iaykC3h0= X-Gm-Gg: AZuq6aJrwyp0uy/KY3euDHphTmFN9aC3T0mGY361QjjUtQJDvSc7LhadhpQg1sjySML DTBZVb6QG84evJP2NmVM0sC/brMXP/Rr4w4RDbMgdxn1r+qkK7r1CNBDY0jmcYbteU7Ryw76Cg2 czqD1APKWn/GYZdnyHshiPozy2tb/4U7y2WHAHBrUiyqVMSEF0U2mCi6dXOStjWNJEnfdD1K+KH TmZX3Hq/oW0zLM4VNLn1RcYyTGlLrdQV8HvbYdBvyRB/+4aJ2t/Q7PNYknUxY4mKv0ZleiK6qJD 5mOacwbOb66n5dm6RP2WEcq3VWenwdZiAvUp4yCwkizZk0DX4HqGXgCmrWir5C3xqSeyw2d6Z6g nq8Ztq/EoihIKxRHLlw== X-Received: by 2002:a17:907:9301:b0:b80:1403:764c with SMTP id a640c23a62f3a-b8fc06c1c8amr95143666b.24.1771018542006; Fri, 13 Feb 2026 13:35:42 -0800 (PST) MIME-Version: 1.0 References: <19409-e16cd2605e59a4af@postgresql.org> <562481.1771013899@sss.pgh.pa.us> In-Reply-To: <562481.1771013899@sss.pgh.pa.us> From: Florents Tselai Date: Fri, 13 Feb 2026 23:35:04 +0200 X-Gm-Features: AZwV_Qhascc0OfJ_HiDHUuGELm9yI1xrcbIdCCGjoXvkqp7_M7re2nZwo_kdqgs Message-ID: Subject: Re: BUG #19409: Function jsonb_strip_nulls() changed from immutable to stable. To: Tom Lane Cc: lucio.chiessi@trustly.com, pgsql-bugs@lists.postgresql.org, Andrew Dunstan Content-Type: multipart/mixed; boundary="000000000000168661064abb630e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000168661064abb630e Content-Type: multipart/alternative; boundary="00000000000016865f064abb630c" --00000000000016865f064abb630c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 13, 2026 at 10:18=E2=80=AFPM Tom Lane wrote= : > PG Bug reporting form writes: > > ... this fails in PostgreSQL 18, because the jsonb_strip_nulls ( target > > jsonb [,strip_in_arrays boolean ] ) function changed from immutable to > > stable. > > A bit of git excavation shows that this changed here: > > Author: Andrew Dunstan > Branch: master Release: REL_18_BR [4603903d2] 2025-03-05 10:04:02 -0500 > > Allow json{b}_strip_nulls to remove null array elements > > An additional paramater ("strip_in_arrays") is added to these > functions. > It defaults to false. If true, then null array elements are removed a= s > well as null valued object fields. JSON that just consists of a singl= e > null is not affected. > > Author: Florents Tselai > > Discussion: > https://postgr.es/m/4BCECCD5-4F40-4313-9E98-9E16BEB0B01D@gmail.com > > It looks like a thinko to me, because surely the strip_in_arrays > parameter did not make the function more mutable than before. > The perils of going from pg_proc.dat to manual defs in system_functions.sql --00000000000016865f064abb630c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Fri, F= eb 13, 2026 at 10:18=E2=80=AFPM Tom Lane <tgl@sss.pgh.pa.us> wrote:
PG Bug reporting form <noreply@postgresql.org> writes:
> ... this fails in PostgreSQL 18, because the jsonb_strip_nulls ( targe= t
> jsonb [,strip_in_arrays boolean ] ) function changed from immutable to=
> stable.

A bit of git excavation shows that this changed here:

Author: Andrew Dunstan <andrew@dunslane.net>
Branch: master Release: REL_18_BR [4603903d2] 2025-03-05 10:04:02 -0500

=C2=A0 =C2=A0 Allow json{b}_strip_nulls to remove null array elements

=C2=A0 =C2=A0 An additional paramater ("strip_in_arrays") is adde= d to these functions.
=C2=A0 =C2=A0 It defaults to false. If true, then null array elements are r= emoved as
=C2=A0 =C2=A0 well as null valued object fields. JSON that just consists of= a single
=C2=A0 =C2=A0 null is not affected.

=C2=A0 =C2=A0 Author: Florents Tselai <florents.tselai@gmail.com>

=C2=A0 =C2=A0 Discussion: https://= postgr.es/m/4BCECCD5-4F40-4313-9E98-9E16BEB0B01D@gmail.com

It looks like a thinko to me, because surely the strip_in_arrays
parameter did not make the function more mutable than before.

The perils of going from pg_proc.dat to manual defs = in system_functions.sql =C2=A0
--00000000000016865f064abb630c-- --000000000000168661064abb630e Content-Type: application/octet-stream; name="v1-0001-Restore-json-b-_strip_nulls-immutability.patch" Content-Disposition: attachment; filename="v1-0001-Restore-json-b-_strip_nulls-immutability.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mllen6zo0 RnJvbSAwODhlNmYyNDAwYzUwMDA3ZTYzYjVmOGIxOGZiNjAwNzVjYzc4YzQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yZW50cyBUc2VsYWkgPGZsb3JlbnRzLnRzZWxhaUBnbWFp bC5jb20+CkRhdGU6IEZyaSwgMTMgRmViIDIwMjYgMjI6NTM6MTQgKzAyMDAKU3ViamVjdDogW1BB VENIIHYxXSBSZXN0b3JlIGpzb257Yn1fc3RyaXBfbnVsbHMgaW1tdXRhYmlsaXR5CgpDb21taXQ0 NjAzOTAzZDIgYWRkZWQgdGhlIHN0cmlwX2luX2FycmF5cyBwYXJhbWV0ZXIgdG8gdGhlc2UgZnVu Y3Rpb25zCmJ1dCBtaXN0YWtlbmx5IGNoYW5nZWQgdGhlaXIgdm9sYXRpbGl0eSBmcm9tIElNTVVU QUJMRSB0byBTVEFCTEUuIFRoaXMKY29tbWl0IHJlc3RvcmVzIHRoZSBjb3JyZWN0IElNTVVUQUJM RSBtYXJraW5nLCBhcyB0aGUgZnVuY3Rpb25zJyBvdXRwdXQKc3RpbGwgZGVwZW5kcyBlbnRpcmVs eSBvbiB0aGVpciBpbnB1dCBhcmd1bWVudHMuCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbCB8IDQgKystLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3Rl bV9mdW5jdGlvbnMuc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNx bAppbmRleCBlYjllMzFhZTFiZi4uODM2YTBmOWViM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fZnVuY3Rpb25zLnNxbApAQCAtNjExLDE0ICs2MTEsMTQgQEAgQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04KICAganNvbmJfc3RyaXBfbnVsbHModGFyZ2V0IGpzb25iLCBzdHJpcF9pbl9h cnJheXMgYm9vbGVhbiBERUZBVUxUIGZhbHNlKQogUkVUVVJOUyBqc29uYgogTEFOR1VBR0UgSU5U RVJOQUwKLVNUUklDVCBTVEFCTEUgUEFSQUxMRUwgU0FGRQorU1RSSUNUIElNTVVUQUJMRSBQQVJB TExFTCBTQUZFCiBBUyAnanNvbmJfc3RyaXBfbnVsbHMnOwogCiBDUkVBVEUgT1IgUkVQTEFDRSBG VU5DVElPTgogICBqc29uX3N0cmlwX251bGxzKHRhcmdldCBqc29uLCBzdHJpcF9pbl9hcnJheXMg Ym9vbGVhbiBERUZBVUxUIGZhbHNlKQogUkVUVVJOUyBqc29uCiBMQU5HVUFHRSBJTlRFUk5BTAot U1RSSUNUIFNUQUJMRSBQQVJBTExFTCBTQUZFCitTVFJJQ1QgSU1NVVRBQkxFIFBBUkFMTEVMIFNB RkUKIEFTICdqc29uX3N0cmlwX251bGxzJzsKIAogLS0gZGVmYXVsdCBub3JtYWxpemF0aW9uIGZv cm0gaXMgTkZDLCBwZXIgU1FMIHN0YW5kYXJkCi0tIAoyLjUyLjAKCg== --000000000000168661064abb630e--