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

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

最佳答案

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

如果您还没有创建特定的模式,那么使用 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

并使用:

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

关于postgresql - 如何检查PostgreSQL上是否存在存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34305186/

相关文章:

python - 使用 Postgresql 数据库创建 Azure Web 应用程序(这可能吗?)

sql - 更新第一个匹配行

MySQL/Maria 构建 View 将缩写与完整描述相匹配

java - 通过Java调用存储过程(MySql)时出错

SQL报告连接三个表

python - 查找在 sqlalchemy 用户定义类型中发生的操作

MySQL存储过程从秒查询返回变量值?

linq-to-sql - Linq to SQL(设计器)不理解存储过程

sql - 是否直接执行SQL错误的应用程序设计?

postgresql - 使用KML生成几何图形