检查 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'
我想获得 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'