Re: BUG #13874: The index of a json field which is created after data are inserted doesn't work.

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема Re: BUG #13874: The index of a json field which is created after data are inserted doesn't work.
Дата
Msg-id CAB7nPqRRmsQqj5grZvdqQz3wZLXSKB2jkbPWu0mXqsmpR_Yorg@mail.gmail.com
обсуждение исходный текст
Ответ на BUG #13874: The index of a json field which is created after data are inserted doesn't work.  (hukim99@gmail.com)
Ответы Re: BUG #13874: The index of a json field which is created after data are inserted doesn't work.
Список pgsql-bugs
On Mon, Jan 18, 2016 at 9:39 PM,  <hukim99@gmail.com> wrote:
> test=# CREATE TABLE json_test (id serial primary key, data jsonb);
> CREATE TABLE
> test=# CREATE INDEX idb_json_test_data ON json_test USING GIN (data);
> CREATE INDEX
> test=# INSERT INTO json_test (data) VALUES ('[ { "id": "id1" }, { "id":
> "id3" } ]');
> INSERT 0 1
> test=# EXPLAIN SELECT * FROM json_test WHERE data @> '[{"id": "id2"}]';
>                                     QUERY PLAN
>
> ----------------------------------------------------------------------------------
>  Bitmap Heap Scan on json_test  (cost=16.01..20.02 rows=1 width=36)
>    Recheck Cond: (data @> '[{"id": "id2"}]'::jsonb)
>    ->  Bitmap Index Scan on idb_json_test_data  (cost=0.00..16.01 rows=1
> width=0)
>          Index Cond: (data @> '[{"id": "id2"}]'::jsonb)
> (4 rows)
>
> test=# DROP TABLE json_test;
> DROP TABLE
> test=# CREATE TABLE json_test (id serial primary key, data jsonb);
> CREATE TABLE
> test=# INSERT INTO json_test (data) VALUES ('[ { "id": "id1" }, { "id":
> "id3" } ]');
> INSERT 0 1
> test=# CREATE INDEX idb_json_test_data ON json_test USING GIN (data);
> CREATE INDEX
> test=# EXPLAIN SELECT * FROM json_test WHERE data @> '[{"id": "id2"}]';
>                         QUERY PLAN
> ----------------------------------------------------------
>  Seq Scan on json_test  (cost=0.00..1.01 rows=1 width=36)
>    Filter: (data @> '[{"id": "id2"}]'::jsonb)
> (2 rows)
>
> The only difference between two instructions above is whether the index is
> created before or after data insertion. Isn't it a bug?

My guess is that there are invalid statistics on this table. If you
run ANALYZE on json_test you should be able to see a sequential scan
in the first case as well. It is weird that the planner chooses a
bitmap scan in the first case for one tuple.
--
Michael

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: Re: Re[2]: [BUGS] BUG #13869: Right Join query that never ends
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #13874: The index of a json field which is created after data are inserted doesn't work.