如何检查PostgreSQL上是否存在存储过程?

N00*_*mer 1 postgresql stored-procedures

我对 PostgreSQL 还很陌生,并试图利用我在 MS SQL Server 和 Oracle 上的知识来学习 PostgreSQL。我正在寻找以下语句的等效语句,我们可以在 MS SQL Server 中使用它来检查存储过程是否存在,在PostgreSQL 中,其中 SPName 是您的存储过程的名称。

SELECT 1 FROM sys.procedures WHERE Name = 'SPName')
SELECT 1 FROM sys.procedures WHERE object_id = OBJECT_ID(N'dbo.SPName')
Run Code Online (Sandbox Code Playgroud)

Viv*_* S. 7

SELECT EXISTS (
        SELECT *
        FROM pg_catalog.pg_proc
        JOIN pg_namespace ON pg_catalog.pg_proc.pronamespace = pg_namespace.oid
        WHERE proname = 'proc_name'
            AND pg_namespace.nspname = 'schema_name'
        )
Run Code Online (Sandbox Code Playgroud)

如果您尚未创建特定架构,则使用public( pg_namespace.nspname = 'public')


或者

您可以创建一个自定义函数来执行如下任务:

create or replace function function_exists (sch text,fun text) returns boolean as
$$
begin
EXECUTE  'select pg_get_functiondef('''||sch||'.'||fun||'''::regprocedure)';
return true;
exception when others then 
return false;
end;
$$ language plpgsql
Run Code Online (Sandbox Code Playgroud)

并使用:

select function_exists('public','function_name()')
Run Code Online (Sandbox Code Playgroud)