adam <adhamm31@hotmail.com> writes:
> I have a simple query select on the hstore attribute "EMAIL_ADDRESS". but the
> thing is i'm using a parameter in the query to specify which hstore
> attribute I want to access, and when using a parameter the index which I
> created is suppressed; whereas when I hard code the attribute
> "EMAIL_ADDRESS" then the index is used.
WFM:
regression=# create extension hstore;
CREATE EXTENSION
regression=# create table foo(f1 hstore);
CREATE TABLE
regression=# create index on foo ((f1->'bar'));
CREATE INDEX
regression=# explain select * from foo where f1->'bar' = 'baz'; QUERY PLAN
---------------------------------------------------------------------------Bitmap Heap Scan on foo (cost=4.21..14.37
rows=7width=32) Recheck Cond: ((f1 -> 'bar'::text) = 'baz'::text) -> Bitmap Index Scan on foo_expr_idx
(cost=0.00..4.21rows=7 width=0) Index Cond: ((f1 -> 'bar'::text) = 'baz'::text)
(4 rows)
regression=# prepare p as select * from foo where f1->$1 = $2;
PREPARE
regression=# explain execute p('bar', 'baz'); QUERY PLAN
---------------------------------------------------------------------------Bitmap Heap Scan on foo (cost=4.21..14.37
rows=7width=32) Recheck Cond: ((f1 -> 'bar'::text) = 'baz'::text) -> Bitmap Index Scan on foo_expr_idx
(cost=0.00..4.21rows=7 width=0) Index Cond: ((f1 -> 'bar'::text) = 'baz'::text)
(4 rows)
As a general rule, when you haven't mentioned the PG version you're using
nor provided an *exact* example of what you're doing, it's difficult to
offer useful help.
regards, tom lane