Обсуждение: Array comparison - subset

Поиск
Список
Период
Сортировка

Array comparison - subset

От
"Christopher Murtagh"
Дата:
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

Re: Array comparison - subset

От
Michael Fuhr
Дата:
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

Re: Array comparison - subset

От
Tom Lane
Дата:
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

Re: Array comparison - subset

От
Michael Fuhr
Дата:
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

Re: Array comparison - subset

От
"Christopher Murtagh"
Дата:
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