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