【发布时间】:2021-11-26 15:05:16
【问题描述】:
我正在编写一些 PostgreSQL 函数来编译一个名为 name 的表中记录的搜索词列表。由于搜索词来自name 表的多个列以及其他表的多个列,因此一个简单的生成列是不够的。
这是该函数的简化版本。
CREATE OR REPLACE FUNCTION compile_name_search_terms(n name) RETURNS text AS $$
BEGIN
return n.id || ' ' ||
COALESCE(n.full_name, '') || ' ' ||
COALESCE(n.phone, '') || ' ' ||
regexp_replace(COALESCE(n.phone, ''), '[\(\)-]', '', 'g');
END
$$ LANGUAGE plpgsql;
尝试执行
SELECT id, compile_name_search_terms(t) FROM name AS t;
抛出错误
ERROR: function compile_name_search_terms(public.name) does not exist
LINE 1: SELECT id, compile_name_search_terms(t) FROM name AS t;
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 12
我有其他表 customer、vendor 等的工作函数,但无法弄清楚 name 表的语法。我怀疑问题源于表名是non-reserved keyword。
我无权重命名 name 表,因为这是在生产中。
我需要什么语法才能完成这项工作?
【问题讨论】:
-
哇!在我尝试过的所有事情中,为什么我没有想到这一点?这样可行。让它成为一个答案,我会接受它。
标签: sql postgresql function