小编Ken*_* Li的帖子

用于在 JSON 数组中查找属性组合的索引

基于这个关于 SO 的相关问题

如果您只想要简单的匹配,这很好用。假设在 JSON 数据中tracks同时具有ArtistTitle字段。所以我们有类似的东西:

INSERT INTO tracks (id, data)
VALUES (1, '[{"artist": "Simple Plan", "title": "Welcome to My Life"}]');
Run Code Online (Sandbox Code Playgroud)

我们像在原始问题中一样创建索引:

CREATE INDEX tracks_artists_gin_idx ON tracks
USING GIN (json2arr(data, 'artist'));

CREATE INDEX tracks_title_gin_idx ON tracks
USING GIN (json2arr(data, 'title'));
Run Code Online (Sandbox Code Playgroud)

所以现在我们有两个字段要匹配。如您所见,如果我们执行以下原始查询(经过非常简单的修改):

SELECT *
FROM   tracks
WHERE  '{"ARTIST NAME"}'::text[] <@ (json2arr(data, 'artist'))
AND    '{"TITLE"}'::text[]       <@ (json2arr(data, 'title'))
Run Code Online (Sandbox Code Playgroud)

这将给出错误的答案,因为 JSON 数组中的艺术家和标题数组的索引不必匹配此查询以匹配 JSON 中的某些内容。执行此查询的正确方法是什么,以便我们可以获得所需的精确匹配?是否json2arr()需要改变?

编辑:为什么这是错误的

假设我们的表有如下记录:

INSERT INTO tracks (id, data) …
Run Code Online (Sandbox Code Playgroud)

postgresql index array json

5
推荐指数
1
解决办法
3504
查看次数

标签 统计

array ×1

index ×1

json ×1

postgresql ×1