Re: Weird special case in jsonb_concat()
Joel Jacobson <joel@compiler.org>
From: "Joel Jacobson" <joel@compiler.org>
To: "Tom Lane" <tgl@sss.pgh.pa.us>, pgsql-hackers@lists.postgresql.org
Date: 2020-12-20T07:33:38Z
Lists: pgsql-hackers
On Sat, Dec 19, 2020, at 21:35, Tom Lane wrote:
>Here is a proposed patch for that.
I've tested the patch and "All 202 tests passed".
In addition, I've tested it on a json intensive project,
which passes all its own tests.
I haven't studied the jsonfuncs.c code in detail,
but the new code looks much cleaner, nice.
>This also addresses the inadequate documentation that was the
>original complaint.
Looks good.
In addition, to the user wondering how to append a json array-value "as is",
I think it would be useful to provide an example on how to do this
in the documentation.
I think there is a risk users will attempt much more fragile
hacks to achieve this, if we don't provide guidance
in the documentation.
Suggestion:
<literal>'["a", "b"]'::jsonb || '["a", "d"]'::jsonb</literal>
<returnvalue>["a", "b", "a", "d"]</returnvalue>
</para>
+ <para>
+ <literal>'["a", "b"]'::jsonb || jsonb_build_array('["a", "d"]'::jsonb)</literal>
+ <returnvalue>["a", "b", ["a", "d"]]</returnvalue>
+ </para>
<para>
<literal>'{"a": "b"}'::jsonb || '{"c": "d"}'::jsonb</literal>
<returnvalue>{"a": "b", "c": "d"}</returnvalue>
> Thoughts? Should we back-patch this? The existing behavior
> seems to me to be inconsistent enough to be arguably a bug,
> but we've not had field complaints saying "this should work".
+1 back-patch, I think it's a bug.
Best regards,
Joel
Commits
-
Remove "invalid concatenation of jsonb objects" error case.
- 38d30a14b05e 13.2 landed
- ff5d5611c01f 14.0 landed
- edcdbc44eed2 9.5.25 landed
- 542248f9ddfd 10.16 landed
- 1d5f3f976b26 9.6.21 landed
- 75c8ef5ae56c 11.11 landed
- 38bef9e433ef 12.6 landed