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

标签 function postgresql permissions 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'

如何使用数据类型获得我想要的结果?

喜欢,

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。我以前写过类似的函数,但是使用了复杂的嵌套表达式,这个函数摆脱了对它的需要。

请注意,在这种情况下,您根本不需要生成任何自定义 SQLJust use GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...如果您使用的是较新的 PostgreSQL。

关于function - 如何获取 PostgreSQL 数据库中的函数列表及其参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033587/

相关文章:

function - 如何在mathematica中定义通用函数?

function - 以矩阵接口(interface)为参数的Go函数

node.js - Sequelize 模型排除 jsonb 字段中的子字段

ruby - ObjectMapper : Find geo places within a certain square, 按邻近度排序

python - mysql错误: ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)

ubuntu - Docker 容器创建由 root 拥有的目录,我需要它们由 1000 :1000 拥有

c - 为什么参数类型声明在括号外?

azure - 尝试了解 Azure Durable Function 上下文

sql - 在组查询中选择第一个

java - 列出已签名小程序的本地目录