如何在Postgres 9.6中的uuid上添加PostgreSQL GIN索引
我试图在Postgres9.6数据库中添加一个包含UUID的GIN索引。从技术上讲,它是一个复合索引,复合GIN支持来自btree_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
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
派生的两个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);