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

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

我有以下功能:

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

函数体中是否有任何方法可以查询和获取,例如:

a)当前函数的参数/参数的总数

b)它们的类型

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

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

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

我宁愿创建一个包含所有函数信息(函数名,函数参数名和类型)的表,并在必要时查询。

蒂亚


你可以尝试解析它。 让fn()成为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

所以信息是:

1
2
3
4
5
6
7
8
9
t=# SELECT fn(1,NULL);
INFO:  name: fn
INFO:  args: {INTEGER,text}
INFO:  names: {i,t}
INFO:  amount: 2
 fn
----

(1 ROW)

当然,支持不是唯一的函数名称选择等等会更复杂。 这只是一个简单的例子