Postgres 获取函数所有者

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::regprocedureproname