有没有办法在Postgresql中跟踪函数依赖项?

时间:2018-06-05 00:01:54

标签: postgresql dependencies

我的PostgreSQL数据库中有很多相互依赖的函数和存储过程。我想运行一个脚本,它将编译那些独立的函数,而不是任何其他函数。然后我想编译下一级函数,依此类推,直到达到顶级函数。 SQL Server有sys.sql_expression_dependencies表,它跟踪引用对象和引用的对象?我们在Postgres有这样的东西吗?如果不是如何实现它。

2 个答案:

答案 0 :(得分:2)

是什么原因? PostgreSQL PL / pgSQL函数没有编译(更好的验证)时间依赖性。仅存在运行时依赖性。目前,我所知道的还没有用于此目的的工具。但是可以从PL profiler https://bitbucket.org/openscg/plprofiler获取一些依赖性。

答案 1 :(得分:0)

您可以查询:

select t.*, f.* from
(
    SELECT  table_name,table_schema,
            table_schema||'.'||table_name full_name,
            table_type 
      FROM information_schema.tables
     WHERE table_schema not in ('information_schema') and table_schema not like 'pg%'

) t
JOIN 
(
    SELECT n.nspname AS schema_name,
           p.proname AS function_name,
           pg_get_function_arguments(p.oid) AS args,
           pg_get_functiondef(p.oid) AS func_def
    FROM   pg_proc p
    JOIN   pg_namespace n ON n.oid = p.pronamespace
    WHERE  n.nspname not in ('pg_catalog','information_schema') and    n.nspname not like 'pg%' 
) f 
on position(t.table_name in f.func_def) >0