Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Doc: clarify handling of duplicate elements in array containment tests.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 23 Sep 2019 16:37:04 +0000 (12:37 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 23 Sep 2019 16:37:04 +0000 (12:37 -0400)
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

doc/src/sgml/func.sgml

index 5b1a2b4190c59b5bd51c5c22c73cc1220f05d352..1ef25bcbce2a1f5ba79d024004b7e6d8bd9909d8 100644 (file)
@@ -12733,14 +12733,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>
 
@@ -12783,8 +12783,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
@@ -12795,6 +12797,15 @@ SELECT NULLIF(value, '(none)') ...
    number of dimensions or subscript ranges were different.)
   </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