mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
Remove "invalid concatenation of jsonb objects" error case.
The jsonb || jsonb operator arbitrarily rejected certain combinations of scalar and non-scalar inputs, while being willing to concatenate other combinations. This was of course quite undocumented. Rather than trying to document it, let's just remove the restriction, creating a uniform rule that unless we are handling an object-to-object concatenation, non-array inputs are converted to one-element arrays, resulting in an array-to-array concatenation. (This does not change the behavior for any case that didn't throw an error before.) Per complaint from Joel Jacobson. Back-patch to all supported branches. Discussion: https://postgr.es/m/163099.1608312033@sss.pgh.pa.us
This commit is contained in:
@ -11455,10 +11455,13 @@ table2-mapping
|
||||
|
||||
<note>
|
||||
<para>
|
||||
The <literal>||</literal> operator concatenates the elements at the top level of
|
||||
each of its operands. It does not operate recursively. For example, if
|
||||
both operands are objects with a common key field name, the value of the
|
||||
field in the result will just be the value from the right hand operand.
|
||||
The <literal>||</literal> operator concatenates two JSON objects by
|
||||
generating an object containing the union of their keys, taking the
|
||||
second object's value when there are duplicate keys. All other cases
|
||||
produce a JSON array: first, any non-array input is converted into a
|
||||
single-element array, and then the two arrays are concatenated.
|
||||
It does not operate recursively; only the top-level array or object
|
||||
structure is merged.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
|
Reference in New Issue
Block a user