Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在postgresql中获取存储过程的参数列表_Sql_Function_Postgresql_Stored Procedures - Fatal编程技术网

如何在postgresql中获取存储过程的参数列表

如何在postgresql中获取存储过程的参数列表,sql,function,postgresql,stored-procedures,Sql,Function,Postgresql,Stored Procedures,我想获取postgresql中存储过程的参数列表,是否有任何查询来获取这些参数 我有一个系统程序可以做同样的事情,那就是: SELECT pg_get_function_identity_arguments('funcname'::regproc); 但在这里,当有多个同名函数时,它将返回一个错误 有什么解决办法吗 提前感谢..因为我使用了如下内容: SELECT CASE WHEN pg_proc.proretset THEN 'setof ' || pg_c

我想获取postgresql中存储过程的参数列表,是否有任何查询来获取这些参数

我有一个系统程序可以做同样的事情,那就是:

SELECT pg_get_function_identity_arguments('funcname'::regproc);
但在这里,当有多个同名函数时,它将返回一个错误

有什么解决办法吗

提前感谢..

因为我使用了如下内容:

SELECT CASE
        WHEN pg_proc.proretset
        THEN 'setof ' || pg_catalog.format_type(pg_proc.prorettype, NULL)
        ELSE pg_catalog.format_type(pg_proc.prorettype, NULL) END,
    pg_proc.proargtypes,
    pg_proc.proargnames,
    pg_proc.prosrc,
    pg_proc.proallargtypes,
    pg_proc.proargmodes,
    pg_language.lanname
FROM pg_catalog.pg_proc
    JOIN pg_catalog.pg_namespace ON (pg_proc.pronamespace = pg_namespace.oid)
    JOIN pg_catalog.pg_language ON (pg_proc.prolang = pg_language.oid)
WHERE
    pg_proc.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype
    AND (pg_proc.proargtypes[0] IS NULL
        OR pg_proc.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype)
    AND NOT pg_proc.proisagg
    AND pg_proc.proname ilike 'MY_FUNCTION_NAME'
    AND pg_namespace.nspname = 'public'
    AND pg_catalog.pg_function_is_visible(pg_proc.oid);

查看结果的第二列和第三列。

对于OP来说已经太晚了,但无论如何:我今天自己搜索了答案,没有找到需要的答案

我提出了这个解决方案:

选择 pronamespace::regnamespace, proname, pg_get_函数_argumentsoid为args_def,-带默认值的参数的完整定义 UNNESTstring_to_arraypg_get_function_identity_argumentsoid,','作为arg-类型为的每个参数 从…起 pg_程序 可以在postgresql 11.x中使用,我想它也可以在其他版本中使用,但没有经过测试


希望这对将来的人有所帮助。

它的给定值为:proargtypes as和proargnames as您使用什么工具查看结果?在我的一个函数的psql和pgAdmin中,我看到:1043;{nr0}。{nr0}是唯一参数的名称,1043是类型。然后我选择pg_catalog.format_type'1043',NULL以查看1043表示字符变化。我使用SQuirrel SQL客户端查询数据库。在我的函数中,传递的参数不止一个,但在你的函数中只有一个参数,所以这会有什么区别吗?你能使用psql或pgAdmin吗?我用带有更多参数的函数测试了它,它返回'23 1043 1043 1114 23 1043 1043 1043 23 1043;{code,status_str,src,dbcurrenttimestamp,tmpuserid,remote_addr,sessionid,http_host,fu_index,script_name}'。您还可以尝试运行我的工具来报告数据库模式,并查看如何报告您的函数。。。与pgAdmin合作,谢谢。。。但它不是和松鼠一起工作的吗?有什么想法吗?