Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
如何在Postgres 9.6中的uuid上添加PostgreSQL GIN索引_Postgresql_Indexing_Uuid_Postgresql 9.6 - Fatal编程技术网

如何在Postgres 9.6中的uuid上添加PostgreSQL GIN索引

如何在Postgres 9.6中的uuid上添加PostgreSQL GIN索引,postgresql,indexing,uuid,postgresql-9.6,Postgresql,Indexing,Uuid,Postgresql 9.6,我试图在Postgres9.6数据库中添加一个包含UUID的GIN索引。从技术上讲,它是一个复合索引,复合GIN支持来自btree_GIN插件 我尝试使用以下语句创建索引: CREATE EXTENSION btree_gin; CREATE INDEX ix_tsv ON text_information USING GIN (client_id, text_search_vector); 但我得到了这个错误: client\u id是数据类型uuid,text\u search\u vec

我试图在Postgres9.6数据库中添加一个包含UUID的GIN索引。从技术上讲,它是一个复合索引,复合GIN支持来自btree_GIN插件

我尝试使用以下语句创建索引:

CREATE EXTENSION btree_gin;
CREATE INDEX ix_tsv ON text_information USING GIN (client_id, text_search_vector);
但我得到了这个错误:

client\u id
是数据类型
uuid
text\u search\u vector
tsvector
。我不认为复合/btree\u gin因子实际上是相关的,因为我尝试仅在
client\u id
上创建索引时会遇到相同的错误,但希望如果有解决方案,它也能与复合索引一起工作

我发现,这似乎表明它应该是可能的(如果可以完成一系列UUID,那么当然可以完成单个UUID)。然而,那里的解决方案对我来说非常不透明——如何修改该解决方案以支持单个UUID,目前还不清楚

我希望解决方案不涉及将UUID强制转换到索引或其他列中的另一种类型,因为我不希望编写包含强制转换的专门查询(我们使用django ORM生成atm查询)。

GIN索引也可以。但不是在第11届Postgres之前,在那里它被添加了

允许
btree\u-gin
索引
bool
bpchar
name
uuid
数据类型(Matheus Oliveira)

因此,简单的解决办法是升级到Postgres 11。这对你来说应该是个好消息:

2019年4月9日:云SQL现在支持PostgreSQL 11.1 Beta版

,在许多情况下,您可以选择使用GiST索引,对于该索引,Postgres 10已经引入了相同的功能

UUID
数据类型的btree\u gist添加索引支持(Paul Jungwirth)

相关的:

如果两者都不是一个选项,那么您将回到您想要避免的:

将uuid强制转换为索引中的其他类型

您可以在(一致!)
文本
表示上创建表达式索引,或者理论上,在从
uuid
派生的两个
bigint
列上创建表达式索引。但第一种方法使指数变得更大、更慢,而第二种方法则造成更复杂的情况

不过cast的语法非常简单:
uuid::text
。在需要一组额外括号的索引表达式中。安装了附加模块后:

CREATE INDEX ix_uuid_tsv ON text_information USING GIN ((client_id::uuid), tsv);
使用GIN((client_id::uuid),tsv)在文本信息上创建索引ix_uuid_tsv
相关的:


或者你也可以从Postgres 11中备份该功能——正如你在评论中提到的,这不是像Google Cloud SQL for PostgreSQL这样的托管服务的选项。我几乎看不到这样的使用案例:一个人能够熟练地实现backport,但不能升级到Postgres 11。

不幸的是,我们使用的是来自Google cloud的托管Postgres解决方案,因此升级到9.6之后是不可能的。真的很不幸。你回到了你不想去的地方…@MichaelNelson在云计算下一个'19谷歌宣布PostGreSQL 11现在可以作为测试版使用:“云SQL for PostgreSQL在去年正式上市后,成为GCP上增长最快的数据库之一。我们听说您需要最新版本,因此我们很高兴宣布支持PostgreSQL 11版,其中包括有用的新功能,如分区改进、存储过程和更多并行性。“来源:@benvdh:刚刚找到并从发行说明中添加了相同的功能。”
CREATE INDEX ix_uuid_tsv ON text_information USING GIN ((client_id::uuid), tsv);