Qual é o índice adequado para consultar estruturas em matrizes no Postgres jsonb?
Estou experimentando manter valores como os seguintes em um Postgresjsonb
campo no Postgres 9.4:
[{"event_slug":"test_1","start_time":"2014-10-08","end_time":"2014-10-12"},
{"event_slug":"test_2","start_time":"2013-06-24","end_time":"2013-07-02"},
{"event_slug":"test_3","start_time":"2014-03-26","end_time":"2014-03-30"}]
Estou executando consultas como:
SELECT * FROM locations
WHERE EXISTS (
SELECT 1 FROM jsonb_array_elements(events) AS e
WHERE (
e->>'event_slug' = 'test_1' AND
(
e->>'start_time' >= '2014-10-30 14:04:06 -0400' OR
e->>'end_time' >= '2014-10-30 14:04:06 -0400'
)
)
)
Como eu criaria um índice com esses dados para consultas como as descritas acima? Isso parece razoável para alguns milhões de linhas, cada uma contendo aproximadamente 10 eventos nessa coluna?
Vale ressaltar que parece que ainda estou recebendo verificações sequenciais com:
CREATE INDEX events_gin_idx ON some_table USING GIN (events);
o que eu acho que é porque a primeira coisa que estou fazendo na consulta é converter dados em elementos da matriz json.