aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-09-23 12:37:04 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2019-09-23 12:37:04 -0400
commit13cd97e6c8c9679a9b2384c22a4f0333b1a5cc55 (patch)
treeddcd5d7c351752008fbe8d0188f617fdb5cbfc3a /doc/src
parent887248e97e2da6f602ddf22aaaaf8cb41d0d010d (diff)
downloadpostgresql-13cd97e6c8c9679a9b2384c22a4f0333b1a5cc55.tar.gz
postgresql-13cd97e6c8c9679a9b2384c22a4f0333b1a5cc55.zip
Doc: clarify handling of duplicate elements in array containment tests.
The array <@ and @> operators do not worry about duplicates: if every member of array X matches some element of array Y, then X is contained in Y, even if several members of X get matched to the same Y member. This was not explicitly stated in the docs though, so improve matters. Discussion: https://postgr.es/m/156614120484.1310.310161642239149585@wrigleys.postgresql.org
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/func.sgml21
1 files changed, 16 insertions, 5 deletions
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 567d2ecf3a8..3d3d9d91836 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -14058,14 +14058,14 @@ SELECT NULLIF(value, '(none)') ...
<row>
<entry> <literal>@&gt;</literal> </entry>
<entry>contains</entry>
- <entry><literal>ARRAY[1,4,3] @&gt; ARRAY[3,1]</literal></entry>
+ <entry><literal>ARRAY[1,4,3] @&gt; ARRAY[3,1,3]</literal></entry>
<entry><literal>t</literal></entry>
</row>
<row>
<entry> <literal>&lt;@</literal> </entry>
<entry>is contained by</entry>
- <entry><literal>ARRAY[2,7] &lt;@ ARRAY[1,7,4,2,6]</literal></entry>
+ <entry><literal>ARRAY[2,2,7] &lt;@ ARRAY[1,7,4,2,6]</literal></entry>
<entry><literal>t</literal></entry>
</row>
@@ -14108,8 +14108,10 @@ SELECT NULLIF(value, '(none)') ...
</table>
<para>
- Array comparisons compare the array contents element-by-element,
- using the default B-tree comparison function for the element data type.
+ The array ordering operators (<literal>&lt;</literal>,
+ <literal>&gt;=</literal>, etc) compare the array contents
+ element-by-element, using the default B-tree comparison function for
+ the element data type, and sort based on the first difference.
In multidimensional arrays the elements are visited in row-major order
(last subscript varies most rapidly).
If the contents of two arrays are equal but the dimensionality is
@@ -14121,6 +14123,15 @@ SELECT NULLIF(value, '(none)') ...
</para>
<para>
+ The array containment operators (<literal>&lt;@</literal>
+ and <literal>@&gt;</literal>) consider one array to be contained in
+ another one if each of its elements appears in the other one.
+ Duplicates are not treated specially, thus <literal>ARRAY[1]</literal>
+ and <literal>ARRAY[1,1]</literal> are each considered to contain the
+ other.
+ </para>
+
+ <para>
See <xref linkend="arrays"/> for more details about array operator
behavior. See <xref linkend="indexes-types"/> for more details about
which operators support indexed operations.
@@ -18277,7 +18288,7 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
<row>
<entry> <literal>@&gt;</literal> </entry>
<entry>contains element</entry>
- <entry><literal>'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*w/hobbes'::aclitem</literal></entry>
+ <entry><literal>'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @&gt; 'calvin=r*w/hobbes'::aclitem</literal></entry>
<entry><literal>t</literal></entry>
</row>