【发布时间】:2020-04-05 08:59:04
【问题描述】:
我正在使用 jsonb 列将特征存储在一个数组中(我遵循@a_horse_with_no_name 在Best Way to Index All JSONB Fields With Boolean Values in PostgreSQL 中的建议)。
例子:
feature
------------------------------
[ "happy", "motivated" ]
[ "happy", "fast", "strong" ]
[ "smart", "fast" ]
[ "happy" ]
SELECT *
FROM mytable
WHERE feature <@ '["happy"]';
应该只返回第 4 行。
SELECT *
FROM mytable
WHERE feature <@ '["happy", "motivated"]';
应该返回第 1 行和第 4 行。
SELECT *
FROM mytable
WHERE feature <@ '["happy", "motivated", "fast", "strong", "smart"]';
应该返回所有 4 行。
我已将 GIN 列编入索引。据我了解?| 的性能会更高,但我需要使用<@,因为行必须存在于数组中。 ?| 只能从数组中的行中找到任何关键元素,而不是包含数组中的每一行。
使用?| 与<@ 语法的任何变通方法?
【问题讨论】:
标签: postgresql jsonb