@> (contains)

Started by PG Bug reporting formover 6 years ago3 messagesdocs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/9.6/functions-array.html
Description:

Hi.
Noticed strange thin with @>
Query "select '{1,2}'::int[] @> '{1,2,2,2,2,2,2,2}'::int[]" returns true,
but first array contains even less elements then second.
I think it's a bug in "contains" logic, but don't know where to submit it.

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: PG Bug reporting form (#1)
Re: @> (contains)

On Sun, Aug 18, 2019 at 8:53 AM PG Doc comments form <noreply@postgresql.org>
wrote:

The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/9.6/functions-array.html
Description:

Hi.
Noticed strange thin with @>
Query "select '{1,2}'::int[] @> '{1,2,2,2,2,2,2,2}'::int[]" returns true,
but first array contains even less elements then second.
I think it's a bug in "contains" logic, but don't know where to submit it.

Its a valid interpretation of "contains", for this purpose each array is
treated like a set (ignoring the cardinality of elements, and overall
dimensionality), but it needs to be documented as behaving that way on that
page. I don't see that its documented anywhere for that matter. The
source code documents that dimensions are ignored but is silent on
duplication of elements:

array_contain_compare:
/*-----------------------------------------------------------------------------
* array overlap/containment comparisons
* These use the same methods of comparing array elements as array_eq.
* We consider only the elements of the arrays, ignoring dimensionality.
*----------------------------------------------------------------------------
*/

David J.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: David G. Johnston (#2)
Re: @> (contains)

"David G. Johnston" <david.g.johnston@gmail.com> writes:

On Sun, Aug 18, 2019 at 8:53 AM PG Doc comments form <noreply@postgresql.org>

Noticed strange thin with @>
Query "select '{1,2}'::int[] @> '{1,2,2,2,2,2,2,2}'::int[]" returns true,
but first array contains even less elements then second.
I think it's a bug in "contains" logic, but don't know where to submit it.

Its a valid interpretation of "contains", for this purpose each array is
treated like a set (ignoring the cardinality of elements, and overall
dimensionality), but it needs to be documented as behaving that way on that
page.

Done now.

regards, tom lane