參考original stackoverflow question,我試圖將gin索引應用於Postgres 9.4中的數組對象中的鍵,但是我沒有得到第一個答案中所述的結果。在PostgreSQL中使用json數組中的索引
你能糾正錯誤嗎?
我遵循的步驟已寫在下面。
第1部分:創建表和索引
CREATE TABLE tracks (id serial, artists jsonb);
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists);
INSERT INTO tracks (id, artists) VALUES (1, '[{"name": "blink-182"}]');
INSERT INTO tracks (id, artists) VALUES (2, '[{"name": "The Dirty Heads"}, {"name": "Louis Richards"}]');
第2部分:查詢
SELECT * FROM tracks WHERE artists @> '{"name": "The Dirty Heads"}';
id | artists
----+---------
(0 rows)
這個查詢給出空的結果。
我也試過使用jsonb_path_ops
GIN索引。
替代索引和查詢:
DROP INDEX tracks_artists_gin_idx;
CREATE INDEX tracks_artistnames_gin_idx ON tracks USING gin (artists jsonb_path_ops);
SELECT * FROM tracks WHERE artists @> '{"name": "The Dirty Heads"}';
id | artists
----+---------
(0 rows)
在你引用的例子中,我的答案中缺少數組層。現在已經解決了。 @ potatosalad的答案提供瞭解釋。 –
對於這個問題的未來觀衆,我發現這個鏈接http://stackoverflow.com/a/30592076/2405689,它展示瞭如何查詢'jsonb'對象數組,類似於上面的查詢所要完成的內容。 – ArchNoob