2013-10-05 87 views
5

在創建PostgreSQL數據庫「地圖」,它採用了PostGIS的擴展的過程中,通過CREATE EXTENSION postgis;,用戶「繪圖者」得到以下錯誤:的Postgres創建擴展PostGIS的錯誤

permission denied to create extension "postgis" 
HINT: Must be superuser to create this extension. 

但用戶「繪圖者」是如通過命令由sudo -u postgres psql指定的數據庫所有者:

CREATE DATABASE map OWNER mapmaker; 
GRANT ALL PRIVILEGES ON DATABASE map TO mapmaker; 

一旦繪圖者是在用戶級超級用戶我不再收到錯誤並且擴展創建讓我明白了一切我所要做的就是調整permiss通過postgres用戶將地圖製作者分配給超級用戶,但是我有興趣知道爲什麼地圖製作者被授予數據庫地圖的所有權限?擴展區別對待嗎?爲了使用擴展,用戶必須是用戶級超級用戶還是可以在數據庫級別分配權限?

我確實看到了cannot create extension without superuser role,但問題的答案沒有解釋爲什麼,並且很遺憾,我沒有足夠的評論意見,因此提出了問題。

的PostgreSQL 9.1.9的PostGIS 2.0.3

回答

6

Packaging Related Objects into an Extension,商務部告訴分機有一個superuser參數,當設置爲true,表示只有超級用戶可以安裝或升級擴展。

這就是PostGIS的情況,大概是因爲在C語言中實現,所以對整個集羣和數據目錄可以做的事情沒有限制,而不僅僅是一個數據庫。超級用戶擁有整個羣集的權限,而單個數據庫的所有者不具有這個權限。

正如需要使用超級用戶權限來創建C語言中的單個函數一樣,同樣的規則適用於整個postgis擴展也是有道理的。