当前位置:  开发笔记 > 编程语言 > 正文

不能在Postgres(9.3)索引中使用concat函数

如何解决《不能在Postgres(9.3)索引中使用concat函数》经验,为你挑选了1个好方法。

我正在几个文本列上创建索引(在Postgres 9.3中),我想使用concat,例如:

CREATE INDEX 
ON my_table
USING gin (to_tsvector('english', concat(title, ' ', description)))

但是,当我尝试这样做时,我收到以下错误:

ERROR: functions in index expression must be marked IMMUTABLE

||操作员的香草连接工作正常.但是,我宁愿使用,concat因为description可能是NULL,并且||运算符似乎将任何串联NULL转换为NULL.

如果我理解正确,这意味着concat没有标记为不可变,我不明白.

当然,我可以只使用coalesce所有可以为空的列,但感觉不够优雅.最重要的是,我很好奇为什么我不能concat在我的索引中使用?



1> jcaron..:

原因CONCAT不是IMMUTABLETom Lane在这篇文章中解释的:

concat()调用数据类型输出函数,这些函数不一定是不可变的.一个简单的例子是timestamptz_out的结果取决于TimeZone设置.

也就是说,这是因为它将接受非文本输入,这可能会在转换为文本时根据会话设置而改变.

你可能不得不为此推出自己的功能.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有