如何获取有关 PostgreSQL 中函数参数的定量和定性信息?

How to get quantitative and qualitative info about function arguments in PostgreSQL?

我有以下功能:

func_name(p_1, p_2, p_3, ...)

函数的body有没有办法queryget,例如:

a) 当前函数arguments/parameters的总数

b) 其中类型

当然,我可以将函数修改为

func_name(n, ..., p_1, p_2, p_3, ...)

并包括我需要的信息作为参数,但这并不能让我开心!

我更愿意创建一个包含所有函数信息(函数名称、函数参数名称和类型)的 table 并在必要时进行查询。

蒂亚

你可以试试解析。设 fn() 为:

t=# create or replace function fn(i int, t text) returns void as $$
declare
 c text;
 a text[];
begin
 GET DIAGNOSTICS c = PG_CONTEXT;
 raise info 'name: %',substring(c from 'function (.*?)\(');
 a := string_to_array(substring(c from '\((.*?)\)'), ',');
 raise info 'args: %',a;
 raise info 'names: %', (select proargnames from pg_proc where proname = substring(c from 'function (.*?)\('));
 raise info 'amount: %',array_length(a,1);
end;
$$ language plpgsql;
CREATE FUNCTION

所以信息是:

t=# select fn(1,null);
INFO:  name: fn
INFO:  args: {integer,text}
INFO:  names: {i,t}
INFO:  amount: 2
 fn
----

(1 row)

当然支持不唯一的函数名select等会比较复杂。这只是一个简单的例子