我尝试创建一个不可变的CONCAT()
。为此,我尝试使用以下 SQL 查询。
选项 1
CREATE FUNCTION immutable_concat(VARIADIC text[])
RETURNS text
LANGUAGE internal IMMUTABLE PARALLEL SAFE AS 'text_concat';
选项 2
CREATE FUNCTION immutable_concat(VARIADIC text[])
RETURNS text
LANGUAGE sql IMMUTABLE PARALLEL SAFE
RETURN array_to_string($1, '');
结果,我得到了一个可以很好地处理文本的函数。但是,如何创建一个类似的函数,该函数将接受一个不仅包含文本元素的数组?
CONCAT()
允许我们执行以下 SQL 查询:
SELECT concat(CURRENT_DATE, true, false, 1, 'text');
结果,我们将得到以下字符串:
2025-03-07tf1text
理想情况下,我想创建一个可以采用不同元素的函数。我的意思是:
SELECT immutable_concat(CURRENT_DATE, true, false, 1, 'text');
可以做到这一点的方法
concat()
是接受语言函数variadic any
不允许的。只要元素类型匹配并且引用函数体,就可以使用多态:db<>fiddle 上的演示sql
plpgsql
anyarray
您还可以对内部进行重新分类
concat()
:我的猜测是你正试图将其用于生成的表达式或功能索引,如果是这样,我假设你知道风险。