時間:2024-02-09 10:40作者:下載吧人氣:20
Postgresql如何批量修改函數擁有者,默認創建的函數對象的擁有者為當前創建的用戶,如果使用postgres超級管理員創建一個test()的函數,擁有者就是postgres用戶。下面講解下如何批量修改擁有者。
本文演示的Postgresql版本如下:
PostgreSQL 9.6.8
要查詢Postgresql的函數和函數參數需要使用函數視圖和參數視圖,分別記錄了函數信息和參數列表信息。
視圖一: information_schema.routines
視圖routines包含當前數據庫中所有的函數。只有那些當前用戶能夠訪問(作為擁有者或具有某些特權)的函數才會被顯示。需要用到的列如下,完整視圖講解請參考官方文檔。
名稱 | 數據類型 | 備注 |
---|---|---|
specific_schema | sql_identifier | 包含該函數的模式名 |
routine_name | sql_identifier | 該函數的名字(在重載的情況下可能重復) |
specific_name | sql_identifier | 該函數的”專用名”。這是一個在模式中唯一標識該函數的名稱,即使該函數真正的名稱已經被重載。專用名的格式尚未被定義,它應當僅被用來與指定例程名稱的其他實例進行比較。 |
視圖二: information_schema.parameters
視圖parameters包含當前數據庫中所有函數的參數的有關信息。只有那些當前用戶能夠訪問(作為擁有者或具有某些特權)的函數才會被顯示。需要用到的列如下,完整視圖講解請參考官方文檔。
名稱 | 數據類型 | 備注 |
---|---|---|
parameter_name | sql_identifier | 參數名,如果參數沒有名稱則為空 |
udt_name | sql_identifier | 該參數的數據類型的名字 |
ordinal_position | cardinal_number | 該參數在函數參數列表中的順序位置(從 1 開始計數) |
specific_name | cardinal_number | 該函數的”專用名”。詳見第 35.40 節。 |
注意:可以通過routines. specific_name 和 parameters.specific_name字段關聯查詢。
如果需要修改的函數只有一個,請執行如下SQL語句即可:
如果需要修改的函數只有一個,請執行如下SQL語句即可:
// 無參數函數
ALTER FUNCTION “abc”.”test”() OWNER TO “dbadmin”;
//帶參數函數
ALTER FUNCTION “abc”.”test3″(p1 varchar, p2 varchar) OWNER TO “dbadmin”;
網友評論