PostgreSQL创建normalize函数失败:语法错误问题求助
解决PostgreSQL函数创建的语法错误问题
问题分析
报错ERROR: syntax error at or near "("的核心原因是函数体中translate的第二个参数存在未转义的单引号:在PostgreSQL的单引号字符串中,单个单引号会被解析为字符串结束标记,导致后续内容语法失效。另外,函数中还包含中文全角引号(‘’),虽然不会引发语法错误,但如果你的需求是处理英文引号,这类字符可能不需要保留。
修正后的函数创建语句
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;
额外排查点
- 确认
public.f_unaccent函数已存在:如果该自定义函数未创建,需要先定义它,否则会出现函数不存在的错误。 - 避免内置函数冲突:PostgreSQL 12+版本内置了
pg_catalog.normalize函数(用于Unicode规范化),虽然可以通过参数重载自定义同名函数,但如果不确定,可将函数名改为custom_normalize这类自定义名称,避免混淆。 - 清理不可见字符:如果仍有问题,可将代码复制到纯文本编辑器(如Notepad++),开启显示所有字符功能,检查是否存在全角空格、零宽空格等不可见特殊字符。
内容的提问来源于stack exchange,提问作者Ramkumar Ramagopalan
相关产品推荐
相关产品推荐

