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) |
当然,支持不是唯一的函数名称选择等等会更复杂。 这只是一个简单的例子