Re: pgsql: GIN: Generalized Inverted iNdex. - Mailing list pgsql-committers

From Teodor Sigaev
Subject Re: pgsql: GIN: Generalized Inverted iNdex.
Date
Msg-id 446C3C42.2020807@sigaev.ru
Whole thread Raw
In response to Re: pgsql: GIN: Generalized Inverted iNdex.  (Christopher Kings-Lynne <chris.kings-lynne@calorieking.com>)
List pgsql-committers
> Ok, I can look into this now...
Good, thank you.

>
> I'm not sure really where to being though.  What are all the new
> operators?  What does it even mean to use a GIN over an int[] column?

Patch introduces three new operators over one-dimensional arrays (left and
rights args should have the same real type) without null elements:

*   anyarray @ anyarray   - contains
     true, if all elements of right array exists in left one
*   anyarray && anyarray  - overlap
     true, if it exists at least one element in both arrays
*   anyarray ~ anyarray   - contained
     true, if all elements of left array exists in right one

Operations @ and ~ are commutators.
Pls, note:
* type of array element must have equality operator, finding by
   typentry = lookup_type_cache(element_type,  TYPECACHE_EQ_OPR_FINFO);
   typentry->eq_opr_finfo.fn_oid
   Equality operator is searching by the same way as it does by
   'anyarray = anyarray' operator.
* nulls element is prohibited because we can't find correct logic for
   result of operations:
   *  '{1,2,3}' @ '{1,NULL}'  - is it true or false?
   *  '{1,2,3,NULL}' @ '{1,NULL}' - ???
   I see that '{NULL}'::int[] = '{NULL}'::int[] returns true, but NULL = NULL
   returns NULL, should I treat NULL element in array as usual element with
   specific value and suppose that NULL=NULL?
* non-one-dimensional arrays have similar problem for definition:
   '{{1,2},{3,4}}' @ '{1,3}'  - ?


GIN has built-in support of that 3 operations over
    select pg_type.typname, pg_opclass.opcname from pg_am, pg_opclass, pg_type
where pg_opclass.opcamid = pg_am.oid and pg_am.amname='gin' and
pg_opclass.opcintype = pg_type.oid;


Contrib/intarray adds support to GIN for 'int4[] @@ query_int' operation
(boolean search in array), contrib/tsearch2 use GIN to speed up 'tsvector @@
tsquery'

> I guess it's a little more difficult to understand than I guessed...

Hope, it will be easier that you think :)

--
Teodor Sigaev                                   E-mail: teodor@sigaev.ru
                                                    WWW: http://www.sigaev.ru/

pgsql-committers by date:

Previous
From: Christopher Kings-Lynne
Date:
Subject: Re: pgsql: GIN: Generalized Inverted iNdex.
Next
From: momjian@postgresql.org (Bruce Momjian)
Date:
Subject: pgsql: Mention that gcc/sparc generates sparcv7 binaries.