如何检查哪个函数使用类型?
How to check which function uses a type?
我有一个类型想要更改,但我不知道还有谁在使用它。
如何检查 return 这种类型的所有函数?
如Erwin Brandstetter所述,这仅适用于直接返回数据类型的函数。
SELECT * FROM information_schema.routines r
WHERE r.type_udt_name = 'YOUR_DATA_TYPE' ORDER BY r.routine_name;
您可以在系统目录中找到所有依赖项pg_depend
。
此returns所有功能取决于类型。 IE。不仅是 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
这也适用于 table 函数:
...
RETURNS TABLE (foo my_type, bar int)
使用 system catalog information functions.
可能还有其他依赖项(不是函数)。从我的查询中删除最后一个 WHERE
条件以进行测试(显然,并调整 SELECT
列表)。
并且仍然有可能在函数体或动态 SQL 中的查询中明确使用类型(例如在强制转换中)。您只能通过解析函数体的文本来识别此类用例。系统中没有注册显式依赖项。
相关:
- How to get function parameter lists (so I can drop a function)
- DROP FUNCTION without knowing the number/type of parameters?
我有一个类型想要更改,但我不知道还有谁在使用它。
如何检查 return 这种类型的所有函数?
如Erwin Brandstetter所述,这仅适用于直接返回数据类型的函数。
SELECT * FROM information_schema.routines r
WHERE r.type_udt_name = 'YOUR_DATA_TYPE' ORDER BY r.routine_name;
您可以在系统目录中找到所有依赖项pg_depend
。
此returns所有功能取决于类型。 IE。不仅是 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
这也适用于 table 函数:
...
RETURNS TABLE (foo my_type, bar int)
使用 system catalog information functions.
可能还有其他依赖项(不是函数)。从我的查询中删除最后一个 WHERE
条件以进行测试(显然,并调整 SELECT
列表)。
并且仍然有可能在函数体或动态 SQL 中的查询中明确使用类型(例如在强制转换中)。您只能通过解析函数体的文本来识别此类用例。系统中没有注册显式依赖项。
相关:
- How to get function parameter lists (so I can drop a function)
- DROP FUNCTION without knowing the number/type of parameters?