我有一个包含 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'
如何使用数据类型获得我想要的结果?
喜欢,
GRANT EXECUTE ON FUNCTION <schema_name>.<table_name>(<list of arguments>) TO <user_name>;
最佳答案
有一个方便的函数可以帮助您: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);
显示所有带参数的函数。您可以调整该 format
咒语以生成任何所需的语句,如果您愿意,可以对其进行 LOOP
以将生成的语句提供给 PL 中的 EXECUTE
/PgSQL.
归功于 Leo Hsu and Regina Obe at Postgres Online用于指出 oidvectortypes
。我以前写过类似的函数,但是使用了复杂的嵌套表达式,这个函数摆脱了对它的需要。
请注意,在这种情况下,您根本不需要生成任何自定义 SQL。 Just use GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...
如果您使用的是较新的 PostgreSQL。
关于function - 如何获取 PostgreSQL 数据库中的函数列表及其参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033587/