From: | "Valentine Gogichashvili" <valgog(at)gmail(dot)com> |
---|---|
To: | "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "Oleg Bartunov" <oleg(at)sai(dot)msu(dot)su>, pgsql-performance(at)postgresql(dot)org, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [PERFORM] Cannot make GIN intarray index be used by the planner |
Date: | 2007-05-10 09:07:17 |
Message-ID: | 3ce9822f0705100207q2e526936gac831901d577e8e2@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-performance |
Hello again,
I got the opclass for the index and it looks like it is a default one
myvideoindex=# select pg_opclass.*, pg_type.typname
myvideoindex-# from pg_index, pg_opclass, pg_type
myvideoindex-# where pg_index.indexrelid =
'idx_nonnulls_myintarray_int4_gin'::regclass
myvideoindex-# and pg_opclass.oid = any (pg_index.indclass::oid[] )
myvideoindex-# and pg_type.oid = pg_opclass.opcintype;
opcamid | opcname | opcnamespace | opcowner | opcintype | opcdefault |
opckeytype | typname
---------+-----------+--------------+----------+-----------+------------+------------+---------
2742 | _int4_ops | 11 | 10 | 1007 | t
| 23 | _int4
(1 row)
The search_path is set to the following
myvideoindex=# show search_path;
search_path
--------------------
"versionA", public
(1 row)
With best regards,
-- Valentine
On 5/9/07, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
> [cc'ing to pgsql-hackers since this is looking like a contrib/intarray
> bug]
>
> "Valentine Gogichashvili" <valgog(at)gmail(dot)com> writes:
> > here is the DT
>
> That works fine for me in 8.2:
>
> regression=# explain SELECT id, (myintarray_int4)
> FROM myintarray_table_nonulls
> WHERE ARRAY[8] <@ myintarray_int4;
> QUERY PLAN
>
> ------------------------------------------------------------------------------------------------------------------
> Index Scan using idx_nonnulls_myintarray_int4_gin on
> myintarray_table_nonulls (cost=0.00..8.27 rows=1 width=36)
> Index Cond: ('{8}'::integer[] <@ myintarray_int4)
> (2 rows)
>
> What I am betting is that you've installed contrib/intarray in this
> database and that's bollixed things up somehow. In particular, intarray
> tries to take over the position of "default" gin opclass for int4[],
> and the opclass that it installs as default has operators named just
> like the built-in ones. If somehow your query is using pg_catalog.<@
> instead of intarray's public.<@, then the planner wouldn't think the
> index is relevant.
>
> In a quick test your example still works with intarray installed, because
> what it's really created is public.<@ (integer[], integer[]) which is
> an exact match and therefore takes precedence over the built-in
> pg_catalog.<@ (anyarray, anyarray). But if for example you don't have
> public in your search_path then the wrong operator would be chosen.
>
> Please look at the pg_index entry for your index, eg
>
> select * from pg_index where indexrelid =
> '"versionA".idx_nonnulls_myintarray_int4_gin'::regclass;
>
> and see whether the index opclass is the built-in one or not.
>
> Note to hackers: we've already discussed that intarray shouldn't be
> trying to take over the default gin opclass, but I am beginning to
> wonder if it still has a reason to live at all. We should at least
> consider removing the redundant operators to avoid risks like this one.
>
> regards, tom lane
>
--
ვალენტინ გოგიჩაშვილი
Valentine Gogichashvili
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Meskes | 2007-05-10 09:54:36 | Re: Windows Vista support (Buildfarm Vaquita) |
Previous Message | Zoltan Boszormenyi | 2007-05-10 08:57:23 | Re: Behavior of GENERATED columns per SQL2003 |
From | Date | Subject | |
---|---|---|---|
Next Message | Susan Russo | 2007-05-10 13:23:03 | REVISIT specific query (not all) on Pg8 MUCH slower than Pg7 |
Previous Message | Dan Harris | 2007-05-10 05:05:21 | Re: Background vacuum |