参考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