Azure PostgreSQL 11.19创建gist_trgm_ops索引时siglen参数报错
问题解答
版本支持情况
PostgreSQL 13版本开始正式支持在gist_trgm_ops运算符类中通过(siglen=xxx)的语法指定签名长度参数。你使用的Azure PostgreSQL 11.19属于13之前的版本,不支持这种写法,因此会触发语法错误;而本地的PostgreSQL 15.3符合版本要求,所以可以正常执行。
Azure端的解决办法
方案1:升级PostgreSQL版本
将Azure PostgreSQL灵活服务器升级到13及以上版本,这是最直接的解决方式,升级后即可直接使用原索引创建语句。
方案2:创建自定义运算符类(不升级版本)
如果暂时无法升级,可通过创建带指定siglen参数的自定义运算符类来实现需求:
- 以拥有超级用户权限的账号(如
azure_superuser)执行以下语句,创建自定义运算符类:
CREATE OPERATOR CLASS gist_trgm_ops_siglen256 FOR TYPE text USING gist AS OPERATOR 1 % (text, text), OPERATOR 2 <% (text, text), OPERATOR 3 %> (text, text), OPERATOR 4 ~ (text, text), OPERATOR 5 ~* (text, text), FUNCTION 1 trgm_gist_consistent(internal, text, smallint, oid, internal), FUNCTION 2 trgm_gist_union(internal, internal), FUNCTION 3 trgm_gist_compress(internal), FUNCTION 4 trgm_gist_decompress(internal), FUNCTION 5 trgm_gist_penalty(internal, internal, internal), FUNCTION 6 trgm_gist_picksplit(internal, internal), FUNCTION 7 trgm_gist_same(internal, internal, internal), STORAGE internal, OPTIONS (siglen = 256);
- 使用自定义运算符类创建索引:
CREATE INDEX test ON "Table" USING gist("Name" gist_trgm_ops_siglen256);
内容的提问来源于stack exchange,提问作者Anton Chaika
相关产品推荐
相关产品推荐

