步骤1:
create or replace procedure pro_1()
as
$$
begin
raise info 'pro1';
end
$$
language plpgsql;
步骤2:
create or replace procedure pro_2()
as
$$
begin
raise info 'pro.1';
raise info 'pro.2';
end
$$
language plpgsql;
在其他过程中查找过程名称:
select proname
from pg_proc
where lower(pg_get_functiondef(oid)) like '%pro_1%' and prokind = 'p'
输出:
pro_1
pro_2
不明白为什么虽然pro.1
提到了 pro_2 而不是 ,但却将其列出pro_1
。
从9.7.操作符上的模式匹配开始
LIKE
:因此,与 和等
'%pro_1%'
匹配,以及与该位置上的任何其他字符匹配。要匹配文字下划线,请对其进行转义:'pro.1'
'pro_1'
'pro#1'
%pro\_1%
pg_get_functiondef()
不仅仅是主体,所以您还要匹配例程的名称。如果您展示的示例没有拼写错误,则它不是在与模式匹配pro1
的第一个过程的主体中pro_1
,而是在该过程的名称中。如果您只是检查子字符串是否存在,那么使用普通 SQL 或 POSIX 正则表达式引擎可能有点过头了。您可以使用更简单的示例
strpos()<>0
:db<>fiddle 上的演示