Postgresql
Postgres 獲取函式所有者
我希望能夠獲得函式名稱和函式所有者名稱的表。
目前,此查詢返回給定模式的函式列表:
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