BUG #19454: PL/pgSQL mishandling jsonb attribute reference - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #19454: PL/pgSQL mishandling jsonb attribute reference
Date
Msg-id 19454-98a60db746b6dd22@postgresql.org
Whole thread
Responses Re: BUG #19454: PL/pgSQL mishandling jsonb attribute reference
Re: BUG #19454: PL/pgSQL mishandling jsonb attribute reference
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      19454
Logged by:          CN Liou
Email address:      ma.sao@msa.hinet.net
PostgreSQL version: 18.3
Operating system:   Linux Debian Bookworm
Description:

It appears the PL/pgSQL assignment operator := fails to maintain the
stability of a jsonb attribute reference (from a function result) during a
self-concatenation operation, whereas a SELECT wrapper forces correct
materialization.

DO $$
DECLARE
        v_payload JSONB := '[]'::jsonb;
        tj JSONB;
BEGIN
        tj := '{"delta": [["1221", "1221", "TWD", 577.82, {"tags":
[]}]]}'::jsonb;
        RAISE NOTICE 'Before: %, Delta is Null: %', (v_payload IS NULL),
(tj->'delta' IS NULL);
        v_payload := v_payload || tj->'delta'; -- The problematic line
        --v_payload := (SELECT v_payload || (tj->'delta')); --This avoids
the issue.
        RAISE NOTICE 'After: %', (v_payload IS NULL);
END $$;





pgsql-bugs by date:

Previous
From: Etsuro Fujita
Date:
Subject: Re: Re: Re: FDW connection drops with "Connection timed out" during async append query due to TCP receive buffer filling up
Next
From: PG Bug reporting form
Date:
Subject: BUG #19455: ALTER TABLE RENAME will rename a sequence