CREATE OR REPLACE FUNCTION normalize(input text, separator text DEFAULT '')
RETURNS text AS $$
BEGIN
RETURN translate(lower(public.f_unaccent(input)), ' '',:-`´‘’_' , separator);
END
$$ LANGUAGE 'plpgsql' IMMUTABLE;
当我执行时,我得到以下错误。我尝试了dos2unix,但没有帮助
错误:在“(“行1或其附近有语法错误:CREATE OR REPLACE FUNCTION规范化(输入文本、分隔符t...
1条答案
按热度按时间zpqajqem1#
正如@Adrian所评论的,
normalize
在标准SQL中是reserved word。但是在Postgres 13之前,它一直是允许的,在Postgres 13中添加了一个同名的系统函数。添加SQL函数
NORMALIZE()
以规范化Unicode字符串,添加IS NORMALIZED
以检查规范化(Peter Eisentraut)“正常化”将其状态更改为:
非保留(不能是函式或型别)
我建议:
最重要的是,让它成为
PARALLEL SAFE
(因为它是),否则你可能会后悔。和
STRICT
,因为所有使用的函数本身都是严格的--假设对于你的f_unaccent()
。BEGIN ATOMIC
需要Postgres 14或更高版本。(否则请将其设置为常规SQL函数。)请参阅:此外,由于
translate()
是最便宜的操作,我会首先应用它来获得微小的整体增益。最后,如果您的
f_unaccent()
函数是like this函数,您可以将附加操作添加到单个函数中,而不是创建另一个 Package 器。