如何在PostgreSQL中获取数据库中的函数列表及其参数?

You*_*tan 3 postgresql permissions function plpgsql

我有一个拥有1000多个功能的数据库.我想授予某些用户执行权限.我无法手动完成,因此我想获得一个函数列表并编写代码以生成所有函数的GRANT EXECUTE脚本.我尝试了以下脚本,但这不是给我参数.我无法通过此查询获取参数.

SELECT  'GRANT EXECUTE ON FUNCTION '||nspname||'.'||proname||' TO gis;'
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'ccdb'
Run Code Online (Sandbox Code Playgroud)

如何使用数据类型获得所需的结果?

喜欢,

GRANT EXECUTE ON FUNCTION <schema_name>.<table_name>(<list of arguments>) TO <user_name>;
Run Code Online (Sandbox Code Playgroud)

Cra*_*ger 6

有一个方便的功能来帮助你:oidvectortypes.

SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes)) 
FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid);
Run Code Online (Sandbox Code Playgroud)

显示带参数的所有函数.您可以调整该format咒语以生成任何所需的语句,如果您愿意,可以LOOP通过它将生成的语句提供到EXECUTEPL/PgSQL中.

感谢狮子座Hsu和里贾纳OBE在网上的Postgres的指出oidvectortypes.我之前编写过类似的函数,但是使用了复杂的嵌套表达式,这个函数摆脱了它的需要.

请注意,在这种情况下,您根本不需要执行任何自定义SQL生成.如果您使用的GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...是最近的PostgreSQL,请使用它.