Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 我可以为(unnest)数组编制索引吗?_Postgresql - Fatal编程技术网

Postgresql 我可以为(unnest)数组编制索引吗?

Postgresql 我可以为(unnest)数组编制索引吗?,postgresql,Postgresql,我想写一些像这样的东西 create index on thread(unnest(tags)); 但是我得到了错误 错误:索引表达式无法返回集合 基本上,我想找到所有tagid为2的文档(),我假设下面的行为就像一个blob(我找不到[1,2],因为我的查询中没有1) 如果您知道要查找的确切值,可以使用smth,如 create index on thread(tags @> '{2}'); 如果你有更高版本的postgres(),你可以使用array\u position 并回答

我想写一些像这样的东西

create index on thread(unnest(tags));
但是我得到了错误

错误:索引表达式无法返回集合

基本上,我想找到所有tagid为2的文档(),我假设下面的行为就像一个blob(我找不到[1,2],因为我的查询中没有1)


如果您知道要查找的确切值,可以使用smth,如

create index on thread(tags @> '{2}'); 
如果你有更高版本的postgres(),你可以使用
array\u position

并回答您的问题: 不能将
unnest
用作索引的函数

使用:

。。。然后使用以下命令查询表:


:数组不是集合;搜索特定数组元素可能是数据库设计错误的标志。考虑为每个项目使用一个单独的表,这将是一个数组元素。这将更容易搜索,并且可能对大量元素进行更好的扩展。@pozs:另一个用户链接了我,显示了您的建议性能较差,而text[]性能更好(但是我的标记有元数据,所以我不能使用text[])只问了几个问题。如果我不使用gin编写
,会发生什么?从我之前看到的来看,杜松子酒似乎是一种杂烩?如果我使用索引/int,它会使用int值吗?@acidzombie:如果你不说
使用gin
,你会得到一个
btree
,索引只会被涉及
=
/
比较的查询使用。在内部,我认为GIN索引只是一个B树,但它的键是数组成员,而不是数组本身。您可以在中阅读有关实现的更多信息。谢谢nick,这听起来很完美。我很紧张,不知道会发生什么。看起来(从您和文档中)默认的btree必须与键/数组完全匹配,并且这个文档说它可以对一行使用多个索引。听起来很完美。谢谢
create index on thread(tags @> '{2}'); 
CREATE INDEX ON thread USING gin (tags);
SELECT * FROM thread WHERE tags @> ARRAY[2];