How to check which function uses a type?
我有一种类型,我想改变,但我不知道还有谁在使用它。
如何检查返回此类型的所有函数?
您可以在系统目录
这将根据类型返回所有??函数。即不仅是
1 2 3 4 5 6 7 8 | 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 |
这也适用于表函数:
1 2 | ... RETURNS TABLE (foo my_type, bar INT) |
使用系统目录信息功能。
可能存在其他依赖项(不是函数)。从我的查询中删除最后一个
并且仍然有可能在函数体或动态SQL中的查询中显式使用类型(例如,在强制转换中)。您只能通过解析函数体的文本来识别此类用例。系统中未注册明确的依赖项。
有关:
- 如何获取函数参数列表(所以我可以删除一个函数)
- DROP FUNCTION不知道参数的数量/类型?
正如Erwin Brandstetter所提到的,这仅适用于直接返回数据类型的函数。
1 2 | SELECT * FROM information_schema.routines r WHERE r.type_udt_name = 'YOUR_DATA_TYPE' ORDER BY r.routine_name; |