Improve documentation about JSONB array containment behavior.

Per gripe from Josh Berkus.
This commit is contained in:
Tom Lane 2014-10-11 14:29:51 -04:00
parent 4a50de1312
commit 25ad5a5284
1 changed files with 10 additions and 2 deletions

View File

@ -269,6 +269,12 @@ SELECT '"foo"'::jsonb @> '"foo"'::jsonb;
-- The array on the right side is contained within the one on the left: -- The array on the right side is contained within the one on the left:
SELECT '[1, 2, 3]'::jsonb @> '[1, 3]'::jsonb; SELECT '[1, 2, 3]'::jsonb @> '[1, 3]'::jsonb;
-- Order of array elements is not significant, so this is also true:
SELECT '[1, 2, 3]'::jsonb @> '[3, 1]'::jsonb;
-- Duplicate array elements don't matter either:
SELECT '[1, 2, 3]'::jsonb @> '[1, 2, 2]'::jsonb;
-- The object with a single pair on the right side is contained -- The object with a single pair on the right side is contained
-- within the object on the left side: -- within the object on the left side:
SELECT '{"product": "PostgreSQL", "version": 9.4, "jsonb":true}'::jsonb @> '{"version":9.4}'::jsonb; SELECT '{"product": "PostgreSQL", "version": 9.4, "jsonb":true}'::jsonb @> '{"version":9.4}'::jsonb;
@ -288,8 +294,10 @@ SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"bar": "baz"}'::jsonb; -- yields f
The general principle is that the contained object must match the The general principle is that the contained object must match the
containing object as to structure and data contents, possibly after containing object as to structure and data contents, possibly after
discarding some non-matching array elements or object key/value pairs discarding some non-matching array elements or object key/value pairs
from the containing object. However, the order of array elements is from the containing object.
not significant when doing a containment match. But remember that the order of array elements is not significant when
doing a containment match, and duplicate array elements are effectively
considered only once.
</para> </para>
<para> <para>