我的服务器中定义了一个类型:
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%'
但这不起作用,这只是在功能代码本身,而不是在它的结构中。
如何查找是否正在使用此类型?
答案 0 :(得分: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'
答案 1 :(得分: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')