4x0*_*0v7 7 postgresql stored-procedures role access-control functions
我希望能够获得一个函数名称和函数所有者名称的表格。
目前,此查询返回给定模式的函数列表:
SELECT proname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON pronamespace = n.oid
WHERE nspname = '<%= schema_name %>';
Run Code Online (Sandbox Code Playgroud)
我可以看到有一proowner
列返回角色的 ID。
https://www.postgresql.org/docs/10/catalog-pg-proc.html
我想要的是返回所有者名称的东西,我只是不知道足够的 SQL 来弄清楚如何加入表等。
|function_name|function_owner|
______________________________
|func1 |func1_owner |
|func2 |func2_owner |
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释如何做到这一点,我将不胜感激!
谢谢
Lau*_*lbe 10
有一个简单和复杂的方法。
复杂的方法是pg_roles
从那里加入并获取用户名。
但是由于 PostgreSQL 黑客不想输入不必要的内容,他们想出了其他的东西:
在内部,每个对象都不是由其名称(可变的)标识,而是由其“对象 ID”标识。这是例如在proowner
列中使用的数字pg_proc
。
现在有所谓的“对象标识符类型”。在内部,这样的类型只是oid
,但是用于显示类型的类型输出函数将其呈现为对象的名称。
将其与 PostgreSQL 的类型转换 operator 放在一起::
,您可以执行以下操作:
SELECT proname,
proowner::regrole
FROM pg_proc
WHERE pronamespace::regnamespace::text = 'public';
Run Code Online (Sandbox Code Playgroud)
额外提示:也许你会喜欢oid::regprocedure
上proname
。