2015-11-05 84 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