2017-05-29 65 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

但这就是他说的他想要的东西:'我想找到所有返回这种类型的函数.' –

相关问题