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

时间:2015-12-16 06:21:00

标签: postgresql stored-procedures

我对PostgreSQL很陌生,并且尝试使用我在MS SQL Server上的知识来学习PostgreSQL&甲骨文。我正在寻找以下语句的等价物,我们可以在MS SQL Server中使用它来检查存储过程是否存在,在 PostgreSQL 中,其中SPName是您的存储过程的名称。 / p>

SELECT 1 FROM sys.procedures WHERE Name = 'SPName')
SELECT 1 FROM sys.procedures WHERE object_id = OBJECT_ID(N'dbo.SPName')

3 个答案:

答案 0 :(得分:4)

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'
        )

如果您尚未创建特定架构,请使用publicpg_namespace.nspname = 'public'

OR

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

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

并使用:

select function_exists('public','function_name()')

答案 1 :(得分:1)

试试这样:

SELECT EXISTS (
  SELECT 1
  FROM   pg_proc JOIN pg_namespace on pg_proc.oid = pg_namespace.oid
  WHERE  pg_proc.proname = 'procedure name'
  and pg_namespace.nspname = 'name'  );

答案 2 :(得分:0)

单线:

SELECT to_regproc('schema_name.proc_name') IS NOT NULL