Re: finish TODOs in to_json_is_immutable, to_jsonb_is_immutable also add tests on it

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: jian he <jian.universality@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2026-03-17T15:32:02Z
Lists: pgsql-hackers
On 2026-03-10 Tu 9:53 PM, jian he wrote:
> On Tue, Mar 10, 2026 at 10:12 PM Andrew Dunstan <andrew@dunslane.net> wrote:
>> OK, here's a v7.
>>
>> . added a break in the loop if we found something mutable
>>
>> . added test for JSON generated columns (was present for JSONB
>> expression indexes but missing for JSON).
>>
>> . added test block demonstrating that range_int (subtype=int) and
>> multirange_int are now correctly treated as immutable, allowing
>> expression indexes via json_array()
>>     and json_object()
>>
> V7 looks good to me.
> one minor issue:
>
> +-- JSON_OBJECTAGG, JSON_ARRAYAGG is aggregate function, can not be
> used in index
> +create index xx on test_mutability(json_objectagg(a: b absent on null
> with unique keys returning jsonb));
> +ERROR:  aggregate functions are not allowed in index expressions
> +LINE 1: create index xx on test_mutability(json_objectagg(a: b absen...
> +                                           ^
>
> +ERROR:  aggregate functions are not allowed in index expressions
> This error case was never exercised in regression tests, so adding it
> here should be fine.
>
> "can not" should be "cannot".
>
>

Thanks. Pushed.


cheers


andrew


--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Commits

  1. make immutability tests in to_json and to_jsonb complete

  2. Include error location in errors from ComputeIndexAttrs().

  3. SQL/JSON: add standard JSON constructor functions