Thread: pgsql: GIN: Generalized Inverted iNdex.

pgsql: GIN: Generalized Inverted iNdex.

From
teodor@postgresql.org (Teodor Sigaev)
Date:
Log Message:
-----------
GIN: Generalized Inverted iNdex.
text[], int4[], Tsearch2 support for GIN.

Modified Files:
--------------
    pgsql/contrib/tsearch2:
        Makefile (r1.13 -> r1.14)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/Makefile.diff?r1=1.13&r2=1.14)
        tsearch.sql.in (r1.17 -> r1.18)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/tsearch.sql.in.diff?r1=1.17&r2=1.18)
    pgsql/contrib/tsearch2/expected:
        tsearch2.out (r1.19 -> r1.20)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/expected/tsearch2.out.diff?r1=1.19&r2=1.20)
    pgsql/contrib/tsearch2/sql:
        tsearch2.sql (r1.11 -> r1.12)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/sql/tsearch2.sql.diff?r1=1.11&r2=1.12)
    pgsql/src/backend/access:
        Makefile (r1.10 -> r1.11)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/Makefile.diff?r1=1.10&r2=1.11)
    pgsql/src/backend/access/transam:
        rmgr.c (r1.21 -> r1.22)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/rmgr.c.diff?r1=1.21&r2=1.22)
    pgsql/src/backend/commands:
        cluster.c (r1.144 -> r1.145)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/cluster.c.diff?r1=1.144&r2=1.145)
        opclasscmds.c (r1.43 -> r1.44)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/opclasscmds.c.diff?r1=1.43&r2=1.44)
        vacuum.c (r1.326 -> r1.327)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c.diff?r1=1.326&r2=1.327)
    pgsql/src/backend/utils/adt:
        selfuncs.c (r1.204 -> r1.205)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/selfuncs.c.diff?r1=1.204&r2=1.205)
    pgsql/src/backend/utils/init:
        globals.c (r1.97 -> r1.98)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/globals.c.diff?r1=1.97&r2=1.98)
    pgsql/src/backend/utils/misc:
        guc.c (r1.317 -> r1.318)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c.diff?r1=1.317&r2=1.318)
    pgsql/src/include/access:
        rmgr.h (r1.15 -> r1.16)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/rmgr.h.diff?r1=1.15&r2=1.16)
    pgsql/src/include/catalog:
        catversion.h (r1.328 -> r1.329)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/catversion.h.diff?r1=1.328&r2=1.329)
        pg_am.h (r1.40 -> r1.41)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_am.h.diff?r1=1.40&r2=1.41)
        pg_amop.h (r1.69 -> r1.70)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_amop.h.diff?r1=1.69&r2=1.70)
        pg_amproc.h (r1.56 -> r1.57)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_amproc.h.diff?r1=1.56&r2=1.57)
        pg_opclass.h (r1.68 -> r1.69)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_opclass.h.diff?r1=1.68&r2=1.69)
        pg_operator.h (r1.142 -> r1.143)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_operator.h.diff?r1=1.142&r2=1.143)
        pg_proc.h (r1.408 -> r1.409)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_proc.h.diff?r1=1.408&r2=1.409)
    pgsql/src/include/utils:
        selfuncs.h (r1.32 -> r1.33)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/selfuncs.h.diff?r1=1.32&r2=1.33)
    pgsql/src/test/regress/expected:
        arrays.out (r1.29 -> r1.30)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/arrays.out.diff?r1=1.29&r2=1.30)
        create_index.out (r1.18 -> r1.19)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/create_index.out.diff?r1=1.18&r2=1.19)
        create_table.out (r1.13 -> r1.14)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/create_table.out.diff?r1=1.13&r2=1.14)
        opr_sanity.out (r1.62 -> r1.63)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/opr_sanity.out.diff?r1=1.62&r2=1.63)
        sanity_check.out (r1.30 -> r1.31)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/sanity_check.out.diff?r1=1.30&r2=1.31)
    pgsql/src/test/regress/input:
        copy.source (r1.13 -> r1.14)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/input/copy.source.diff?r1=1.13&r2=1.14)
    pgsql/src/test/regress/output:
        copy.source (r1.11 -> r1.12)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/output/copy.source.diff?r1=1.11&r2=1.12)
        misc.source (r1.43 -> r1.44)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/output/misc.source.diff?r1=1.43&r2=1.44)
    pgsql/src/test/regress/sql:
        arrays.sql (r1.22 -> r1.23)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/arrays.sql.diff?r1=1.22&r2=1.23)
        create_index.sql (r1.17 -> r1.18)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/create_index.sql.diff?r1=1.17&r2=1.18)
        create_table.sql (r1.8 -> r1.9)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/create_table.sql.diff?r1=1.8&r2=1.9)
        opr_sanity.sql (r1.49 -> r1.50)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/opr_sanity.sql.diff?r1=1.49&r2=1.50)

Added Files:
-----------
    pgsql/contrib/tsearch2:
        ginidx.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/ginidx.c?rev=1.1&content-type=text/x-cvsweb-markup)
    pgsql/src/backend/access/gin:
        Makefile (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/Makefile?rev=1.1&content-type=text/x-cvsweb-markup)
        README (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/README?rev=1.1&content-type=text/x-cvsweb-markup)
        ginarrayproc.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginarrayproc.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginbtree.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginbtree.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginbulk.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginbulk.c?rev=1.1&content-type=text/x-cvsweb-markup)
        gindatapage.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/gindatapage.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginentrypage.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginentrypage.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginget.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginget.c?rev=1.1&content-type=text/x-cvsweb-markup)
        gininsert.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/gininsert.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginscan.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginscan.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginutil.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginutil.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginvacuum.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginvacuum.c?rev=1.1&content-type=text/x-cvsweb-markup)
        ginxlog.c (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginxlog.c?rev=1.1&content-type=text/x-cvsweb-markup)
    pgsql/src/include/access:
        gin.h (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/gin.h?rev=1.1&content-type=text/x-cvsweb-markup)
    pgsql/src/test/regress/data:
        array.data (r1.1)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/data/array.data?rev=1.1&content-type=text/x-cvsweb-markup)

Re: pgsql: GIN: Generalized Inverted iNdex.

From
Tom Lane
Date:
teodor@postgresql.org (Teodor Sigaev) writes:
> Log Message:
> -----------
> GIN: Generalized Inverted iNdex.
> text[], int4[], Tsearch2 support for GIN.

So ... where's the documentation?

            regards, tom lane

Re: pgsql: GIN: Generalized Inverted iNdex.

From
Oleg Bartunov
Date:
On Tue, 2 May 2006, Tom Lane wrote:

> teodor@postgresql.org (Teodor Sigaev) writes:
>> Log Message:
>> -----------
>> GIN: Generalized Inverted iNdex.
>> text[], int4[], Tsearch2 support for GIN.
>
> So ... where's the documentation?

Will submit soon. Christopher Kings-Lynne kindly agreed to help us
with SGML and wording.


>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83

Re: pgsql: GIN: Generalized Inverted iNdex.

From
Christopher Kings-Lynne
Date:
>> teodor@postgresql.org (Teodor Sigaev) writes:
>>> Log Message:
>>> -----------
>>> GIN: Generalized Inverted iNdex.
>>> text[], int4[], Tsearch2 support for GIN.
>>
>> So ... where's the documentation?
>
> Will submit soon. Christopher Kings-Lynne kindly agreed to help us
> with SGML and wording.

Just gimme some time :)


Re: pgsql: GIN: Generalized Inverted iNdex.

From
Christopher Kings-Lynne
Date:
>> Will submit soon. Christopher Kings-Lynne kindly agreed to help us
>> with SGML and wording.
>
> Just gimme some time :)

Ok, I can look into this now...

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?

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

Chris


Re: pgsql: GIN: Generalized Inverted iNdex.

From
Teodor Sigaev
Date:
> 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/