在PostgreSQL中使用布尔值索引所有JSONB字段的最佳方法

我正在创建一个具有features jsonb列的表。将有一组动态功能(每行可以具有一组未知功能)。每个功能都是布尔值true / false。

示例:

  • 行1:功能:{“ happy”:true,“ tall”:false,“动力”:true}
  • 第2行:功能:{“ happy”:true,“ fast”:true,“ strong”:false}
  • 第3行:功能:{“ smart”:true,“ fast”:true,“ sleepy”:false}

索引此列的最佳方法是什么,以便我可以进行查询以查找具有featureX = true的所有行?我查找的所有示例似乎都需要一个字段名称作为索引的基础。

yayammi 回答:在PostgreSQL中使用布尔值索引所有JSONB字段的最佳方法

您可以在完整的JSON值上创建索引:

create index on the_table using gin (features);

它可以用于例如@>运算符:

select *
from the_table
where features @> '{"happy": true}'

另一种方法是不存储键/值对,而仅在数组["happy","motivated"]中列出“ true”的功能,然后使用?运算符。这样,JSON值会更小,并且可能会更有效。

select *
from the_table
where features ? 'happy'

或者如果您要测试多个功能:

select *
from the_table
where features ?| array['happy','motivated']

这也可以利用GIN索引

本文链接:https://www.f2er.com/3140761.html

大家都在问