question about hstore and indexes

From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: question about hstore and indexes
Date: 2013-09-27 07:24:44
Message-ID: 20130927072444.GA6245@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi @all,

i have this table with some rows:

test=*# \d my_hstore;
Table "public.my_hstore"
Column | Type | Modifiers
--------+---------+--------------------------------------------------------
id | integer | not null default
nextval('my_hstore_id_seq'::regclass)
werte | hstore |
Indexes:
"my_hstore_pkey" PRIMARY KEY, btree (id)
"idx_hstore" gist (werte)

test=*# select * from my_hstore;
id | werte
----+----------------------------------
1 | "key1"=>"val1", "key2"=>"val2"
2 | "key1"=>"val11", "key2"=>"val22"
3 | "key1"=>"val21"
4 | "key3"=>"val3"
(4 rows)

i have set enable_seqscan to false.

This query can't use the index:

test=*# explain select * from my_hstore where werte->'key1' = 'val1';
QUERY PLAN
------------------------------------------------------------------------------
Seq Scan on my_hstore (cost=10000000000.00..10000000001.06 rows=1 width=36)
Filter: ((werte -> 'key1'::text) = 'val1'::text)
(2 rows)

I have to add this condition: werte ? 'key1'

test=*# explain select * from my_hstore where werte ? 'key1' and werte->'key1' = 'val1';
QUERY PLAN
-----------------------------------------------------------------------------
Index Scan using idx_hstore on my_hstore (cost=0.13..8.15 rows=1 width=36)
Index Cond: (werte ? 'key1'::text)
Filter: ((werte -> 'key1'::text) = 'val1'::text)
(3 rows)

Why? I'm searching only for werte->'key1' with the condition = 'val1', why i have to add
the redundant where-condition?

I'm using 9.3., havn't try it with 9.2 or other versions.

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Matteo Beccati 2013-09-27 07:41:03 Re: question about hstore and indexes
Previous Message Steven Schlansker 2013-09-27 05:40:00 Re: Trying to create DB / user to import some data