Array comparison - subset
Greetings folks,
I've got a function that returns and array $foo, and an array $bar.
Is there an elegant way to test if $bar is a subset of $foo? I've been
looking through the docs and haven't found anything. Am I missing
something obvious, or am I out of luck?
Cheers,
Chris
On Fri, Sep 01, 2006 at 11:55:32AM -0400, Christopher Murtagh wrote:
I've got a function that returns and array $foo, and an array $bar.
Is there an elegant way to test if $bar is a subset of $foo? I've been
looking through the docs and haven't found anything. Am I missing
something obvious, or am I out of luck?
In the specific case of integer arrays you could use contrib/intarray.
test=> SELECT ARRAY[1, 2, 3, 4] @ ARRAY[1, 3];
?column?
----------
t
(1 row)
test=> SELECT ARRAY[1, 2, 3, 4] @ ARRAY[1, 5];
?column?
----------
f
(1 row)
In 8.2 the above example will work in the stock installation for
arrays of any type (i.e., with operands of type anyarray).
--
Michael Fuhr
Michael Fuhr <mike@fuhr.org> writes:
test=> SELECT ARRAY[1, 2, 3, 4] @ ARRAY[1, 3];
?column?
----------
t
(1 row)
In 8.2 the above example will work in the stock installation for
arrays of any type (i.e., with operands of type anyarray).
[ blink... ] When did that get in, and why don't I see it in the
documentation? The operand order seems exactly backward considering
that all the pre-existing @ operators are "contained in", not
"contains". Should we flip this around before it's too late?
regards, tom lane
On Sun, Sep 03, 2006 at 12:59:08AM -0400, Tom Lane wrote:
Michael Fuhr <mike@fuhr.org> writes:
test=> SELECT ARRAY[1, 2, 3, 4] @ ARRAY[1, 3];
?column?
----------
t
(1 row)In 8.2 the above example will work in the stock installation for
arrays of any type (i.e., with operands of type anyarray).[ blink... ] When did that get in, and why don't I see it in the
documentation?
Looks like it arrived with the gin code.
http://archives.postgresql.org/pgsql-committers/2006-05/msg00007.php
http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_operator.h.diff?r1=1.142&r2=1.143
The operand order seems exactly backward considering
that all the pre-existing @ operators are "contained in", not
"contains". Should we flip this around before it's too late?
I'd favor consistency, although I see that contrib/intarray has had
it backwards for a long time :-(
--
Michael Fuhr
On 9/3/06, Michael Fuhr <mike@fuhr.org> wrote:
On Fri, Sep 01, 2006 at 11:55:32AM -0400, Christopher Murtagh wrote:
I've got a function that returns and array $foo, and an array $bar.
Is there an elegant way to test if $bar is a subset of $foo? I've been
looking through the docs and haven't found anything. Am I missing
something obvious, or am I out of luck?In the specific case of integer arrays you could use contrib/intarray.
Cool. This is exactly what I needed. Thanks a bunch!
Cheers,
Chris