postgres创建扩展postgis错误

时间:2013-10-05 01:33:47

标签: postgresql-9.1 postgis

在使用postgis扩展创建postgresql数据库“map”的过程中,通过CREATE EXTENSION postgis;,用户“mapmaker”会收到以下错误:

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

但是用户“mapmaker”是sudo -u postgres psql通过以下命令指定的数据库所有者:

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

一旦mapmaker成为用户级别的超级用户,我就不再收到错误,并且创建了扩展程序,所以我理解我要做的就是通过postgres用户将mapmaker的权限调整为超级用户,但我有兴趣知道为什么如果mapmaker被授予数据库映射的所有权限,情况就是这样吗?扩展是否区别对待?为了使用扩展,用户必须是用户级超级用户,还是可以在数据库级别分配权限?

我确实看到了cannot create extension without superuser role,但问题的答案并没有解释为什么,不幸的是,我没有足够的观点来评论,因此这个问题。

PostgreSQL 9.1.9 PostGIS 2.0.3

1 个答案:

答案 0 :(得分:6)

Packaging Related Objects into an Extension中,文档告知扩展名为superuser参数,当设置为true时,表示只有超级用户可以安装或升级扩展程序。

这就是PostGIS的情况,可能是因为它是用C语言实现的,它对整个集群和数据目录的作用没有限制,而不仅仅是一个数据库。超级用户拥有整个群集的权限,单个数据库的所有者没有权限。

正如需要超级用户权限来在C语言中创建单个函数一样,出于同样的原因,同样的规则也适用于整个postgis扩展。