Обсуждение: 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