2017-05-29 31 views
1

我在我的服務器定義的類型:PostgreSQL - 我怎麼知道哪個函數使用了一個類型?

CREATE TYPE typ_gbom AS 
(
    ab citext, 
    id integer, 
    name citext, 
    user citext, 
    comment citext 
); 
ALTER TYPE typ_gbom 
    OWNER TO postgres; 

我想找到返回該類型的所有功能。

含義具有所有功能:

CREATE OR REPLACE FUNCTION a() 
    RETURNS setof typ_gbom AS 

CREATE OR REPLACE FUNCTION a() 
    RETURNS typ_gbom AS 

我想:

select * from pg_proc where prosrc ilike '%typ_gbom%' 

但是這是行不通的,這是在函數代碼本身只關注而不是它的結構。

如何才能找到此類型是否正在使用?

回答

3

您可以使用pg_depend此:

select n.nspname as function_schema, p.proname as function_name 
from pg_proc p 
    join pg_namespace n on n.oid = p.pronamespace 
    join pg_depend d on d.objid = p.oid and d.classid = 'pg_proc'::regclass 
    join pg_type typ on typ.oid = d.refobjid 
    join pg_namespace ts on ts.oid = typ.typnamespace 
where ts.nspname = 'public' --<< change to your schema name 
    and typ.typname = 'typ_gbom' 
0

有返回功能的元數據的一些功能。我們可以使用它們提取所需的信息

SELECT 
    p.proname as func_name, 
    pg_catalog.pg_get_function_result(p.oid) as result_type, 
    pg_catalog.pg_get_function_arguments(p.oid) as argument_types, 
CASE 
    WHEN p.proisagg THEN 'agg' 
    WHEN p.proiswindow THEN 'window' 
    WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger' 
    ELSE 'normal' 
END as func_type 
FROM pg_catalog.pg_proc p 
WHERE pg_catalog.pg_function_is_visible(p.oid) 
    AND pg_catalog.pg_get_function_result(p.oid) IN ('typ_gbom', 'SETOF typ_gbom') 
+0

這隻會返回_return_類型的函數。但不包括具有該類型作爲參數的函數。 –

+0

但這就是他說的他想要的東西:'我想找到所有返回這種類型的函數.' –

相關問題