2015-11-05 78 views

回答

3

您可以在系统目录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 

这也适用于表功能:

... 
RETURNS TABLE (foo my_type, bar int) 

使用system catalog information functions

可能存在其他依赖关系(而不是函数)。从我的查询中删除最后一个WHERE条件进行测试(显然,并修改了SELECT列表)。

在函数体或动态SQL的查询中,仍有可能显式使用该类型(例如在转换中)。您只能通过解析函数体的文本来识别这些用例。系统中没有注册的显式依赖项。

相关:

+0

我在哪里放置类型名称? – avi

+0

@avi:我添加了一个指针。 –

1

Erwin Brandstetter所述,这仅适用于直接返回数据类型的函数。

SELECT * FROM information_schema.routines r 
WHERE r.type_udt_name = 'YOUR_DATA_TYPE' ORDER BY r.routine_name; 
+0

它不工作...我在乌尔查询puted我喜欢的类型名称和它给0行......它不让我看到使用这种类型的功能。 – avi

+1

@avi:你可以试试'SELECT * FROM information_schema.routines r WHERE r.type_udt_name ='YOUR_DATA_TYPE'ORDER BY r.routine_name;'? – zb226

+0

评论中的查询有效。 – avi