我的jsonb字段里,内容如
{name:“aaa“,data:“2017-12-12”}
我现在想给这个date字段创建索引,结果提示
ERROR: functions in index expression must be marked IMMUTABLE
我查询代码如下:
create index item_date_year on item using btree((date_part('year'::text,(myjsonb ->> 'date')::date)));
我看过date_part这个函数,是稳定的函数(IMMUTABLE)
我在表里单独建立一个字段保存date并建立索引就没问题。
请问是哪里的问题?
postgresql版本9.6
自己暂时解决了,问题出在::date转换上,把jsonb里的date字符串转成date格式,内置的方法,均不是immutable属性(稳定属性),所以不允许建立索引。包括to_date()函数。
解决办法:自己按照内置的to_date()函数,改一个to_date_immutable()函数。
然后给to_date_immutable()函数immutable属性。
然后用自己的to_date_immutable()函数转换格式。就可以创建索引了。
虽然官方不建议在非immutable属性上强行索引,但是为了解决问题。。。没办法了
谁有更好的办法,可以留言哈~!
创建函数代码:
建立索引代码: