Postgresql

Postgres 獲取函式所有者

  • February 6, 2020

我希望能夠獲得函式名稱和函式所有者名稱的表。

目前,此查詢返回給定模式的函式列表:

 SELECT  proname
 FROM    pg_catalog.pg_namespace n
 JOIN    pg_catalog.pg_proc p
 ON      pronamespace = n.oid
 WHERE   nspname = '<%= schema_name %>';

我可以看到有一proowner列返回角色的 ID。

https://www.postgresql.org/docs/10/catalog-pg-proc.html

我想要的是返回所有者姓名的東西,我只是不知道足夠的 SQL 來弄清楚如何加入表等。

|function_name|function_owner|
______________________________
|func1        |func1_owner   |
|func2        |func2_owner   |

如果有人可以解釋如何做到這一點,我將非常感激!

謝謝

有一個簡單和一個複雜的方法。

複雜的方法是加入pg_roles並從那裡獲取使用者名。

但由於 PostgreSQL 黑客不想輸入不必要的內容,他們想出了別的辦法:

在內部,每個對像不是由其名稱(可變的)標識,而是由其“對象 ID”標識。這是例如在 的proowner列中使用的數字pg_proc

現在有所謂的“對象標識符類型”。在內部,這樣的類型只是oid,但是用於顯示類型的類型輸出函式將其呈現為對象的名稱。

把它和 PostgreSQL 的類型轉換操作符放在一起::,你可以這樣做:

SELECT proname,
      proowner::regrole
FROM pg_proc
WHERE pronamespace::regnamespace::text = 'public';

附加提示:也許你更喜歡oid::regprocedure.proname

引用自:https://dba.stackexchange.com/questions/259001