> Serj <fenix@am.ring.ru> writes:
> > [ system not using an index when it should ]
>
> Two questions:
>
> 1. Did you do a "vacuum analyze" after making the indexes?
> Without that, the optimizer may be choosing a sequential scan
> because it doesn't know how big the tables are.
>
> 2. What postgres version are you using?
>
> There are some bugs in the current cvs sources that affect whether
> indexes get used --- look at the ongoing threads in the hackers list.
> Maybe you've found another manifestation of that problem. But if
> you're using 6.3.2 then it's something different...
I think we now know what is happening in the current cvs tree. The
optimizer calls op_class to find if there is an pg_opam entry for the
expression (int4eq), the current index access type(btree), and the
current index op class(int4_ops).
In the case of oideqint4, there is no pg_amop to match it, and we can't
add extra rows to pg_amop to make it work. I suppose we could try
adding a amopopr_compat column to pg_amop, and somehow do a lookup on
that if the first one does not match. Because of the way the system
caches are structured, we would need a new cache for that extra column,
I think. There must be a better way.
--
Bruce Momjian | 830 Blythe Avenue
maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026
+ If your life is a hard drive, | (610) 353-9879(w)
+ Christ can be your backup. | (610) 853-3000(h)