Avoid undesired flattening of jsonb arrays? - Mailing list pgsql-general

From Joel Jacobson
Subject Avoid undesired flattening of jsonb arrays?
Date
Msg-id 0d72b76d-ca2b-4263-8888-d6dfca861c51@www.fastmail.com
Whole thread Raw
Responses Re: Avoid undesired flattening of jsonb arrays?  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-general
The || operator for the jsonb type has a surprising behaviour.

Instead of appending the right operand "as is" to the left operand,
it has a magic behaviour if the right operand is an array,
in which case it will append the items of the array,
instead of appending the array itself as a single value.

Example:

SELECT '[10,20]'::jsonb || '30'::jsonb;
[10, 20, 30]

SELECT '[10,20]'::jsonb || '[30]'::jsonb;
[10, 20, 30]

Since [10, 20, [30]] is desired in our case, we must use jsonb_insert() to work-around the problem in a not very nice way:

SELECT jsonb_insert('[10,20]'::jsonb,'{-1}','[30]'::jsonb,TRUE);
[10, 20, [30]]

Suggestions welcome if there is a better way to solve this problem.

Best regards,

Joel

pgsql-general by date:

Previous
From: Ron
Date:
Subject: Re: Unexpected result count from update statement on partitioned table
Next
From: "David G. Johnston"
Date:
Subject: Re: Avoid undesired flattening of jsonb arrays?