avi*_*avi 3 sql postgresql ddl information-schema
我有一个想要更改的类型,但我不知道还有谁在使用它。
如何检查返回此类型的所有函数?
您可以在系统目录中找到所有依赖项pg_depend。
这将根据类型返回所有函数。即不仅是子句中具有类型的那些RETURNS,而且还具有作为函数参数的类型的那些:
SELECT objid::regproc AS function_name
, pg_get_functiondef(objid) AS function_definition
, pg_get_function_identity_arguments(objid) AS function_args
, pg_get_function_result(objid) AS function_returns
FROM pg_depend
WHERE refclassid = 'pg_type'::regclass
AND refobjid = 'my_type'::regtype -- insert your type name here
AND classid = 'pg_proc'::regclass; -- only find functions
Run Code Online (Sandbox Code Playgroud)
这也适用于表函数:
...
RETURNS TABLE (foo my_type, bar int)
Run Code Online (Sandbox Code Playgroud)
使用系统目录信息功能。
可能还有其他依赖项(不是函数)。从我的查询中删除最后一个WHERE条件进行测试(SELECT显然,并调整列表)。
并且仍然有可能在函数体的查询或动态 SQL 中显式使用该类型(例如在强制转换中)。您只能通过解析函数体的文本来识别此类用例。系统中没有注册显式依赖项。
有关的: