【发布时间】:2020-09-25 18:42:13
【问题描述】:
我正在使用 PostgreSQL。 有什么方法可以创建索引 只在字典键上,而不是值上。
例如想象一个 jsonb 列,如:
select data from tablename where id = 0;
answer: {1:'v1', 2:'v2'}
我想索引[1, 2] 的键集(或键列表)。加快查询速度,例如:
select count(*) from tablename where data ? '2';
正如您在docs 中看到的,有一种方法可以完全索引列(键 + 值):
CREATE INDEX idxgin ON api USING GIN (jdoc);
考虑到我将大量数据存储在值中,这对我不利。
我以前试过这个:
CREATE INDEX test ON tablename (jsonb_object_keys(data));
错误是:
ERROR: set-returning functions are not allowed in index expressions
另外,我不想将字典中的键作为值存储。
你能帮帮我吗?
【问题讨论】:
-
创建索引以支持查询。您必须向我们展示您希望使用该索引支持哪种查询(where 条件)。例如您拥有的索引将支持
where data ? '1' -
使用
where data ? '?' -
再次声明:该条件可以利用列上的 gin 索引。
-
啊哈。我可以请你告诉我在命令中写什么吗? CREATE INDEX 测试表名(数据?);像那样?
-
ِ是的。但这会索引所有对我来说不愉快的数据(键+值)。我只想索引键。
标签: postgresql indexing jsonb