检查 postgresql 中函数的 return 类型

Check return type of a function in postgresql

我想获得 return 类型的 函数 ,因此查询将像这样:

select t.typname
from pg_proc p
inner join pg_namespace n on p.pronamespace = n.oid
inner join pg_type t on t.oid = p.prorettype
where n.nspname = current_schema() and p.prokind = 'f' and p.proname = 'my_function_name';

现在,我使用 typname 进行比较以获得 return 类型的函数:refcursor、record、int、... 但我想问一下,我可以将下面的查询更改为 (not join pg_type):

select p.prorettype
from pg_proc p
inner join pg_namespace n on p.pronamespace = n.oid
where n.nspname = current_schema() and p.prokind = 'f' and p.proname = 'my_function_name'

所以现在,要检查 return 类型是 refcursor,而不是 if typname = 'refcursor' then,我将使用 if prorettype = 1790 then(1790 是 oid 的数据类型 'refcursor').那我可以这样做吗?我的意思是,在所有 Postgresql 版本中,每次 'refecursor' 的 oid 仍然是 1790?

谢谢。

您可以使用format_type()

select format_type(p.prorettype, null) as return_type
from pg_proc p
where p.proname = 'my_function_name';
  and p.pronamespace = current_schema::regnamespace;
  and p.prokind = 'f'