2013-12-21 33 views
31

当我试图让我的数据库hstore:为什么只有超级用户CREATE EXTENSION hstore,而不是Heroku?

=> CREATE EXTENSION IF NOT EXISTS hstore; 
ERROR: permission denied to create extension "hstore" 
HINT: Must be superuser to create this extension. 

我的用户是不是超级用户,但数据库的所有者。

根据the CREATE EXTENSION docs

加载的扩展需要,将需要创建的组件对象相同的权限。对于大多数扩展,这意味着需要超级用户或数据库所有者权限。谁运行创建扩展的用户成为扩展后的权限检查目​​的的拥有者,以及通过扩展的脚本创建的任何对象的所有者。

什么hstore这样做需要超级用户权限?它是否影响到我将其添加到数据库之外的部分集群?


而且confundity:

The DB user Heroku Postgres provides is not a superuser

的Heroku Postgres的用户将被授予对他们的数据库中所有非超级用户的权限。这些措施包括SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE

然而,that user is able to CREATE EXTENSION hstore

要创建任何支持扩展,打开与Heroku的第一个会话:PSQL并运行相应的命令:

$ heroku pg:psql 
Pager usage is off. 
psql (9.2.4) 
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 
Type "help" for help. 

ad27m1eao6kqb1=> CREATE EXTENSION hstore; 
CREATE EXTENSION 
ad27m1eao6kqb1=> 

(对于情况下,我“M试图建立一个Dokku部署,所以相比于Heroku的是特别重要的。)

+0

我想这是因为它需要加载/绑定,只有超级用户被允许做本地库(DLL /左右)。 –

+0

我和你在一起@a_horse_with_no_name,它需要修改服务器的过程,所以认为这就是为什么它需要SU,我通常使用SU,切换到数据库所有者之前加载它作为引导的一部分,但无法找到的文档支持 – Doon

+0

嗯。这很有道理,但看到我对Heroku的补充。在设置使非超级用户成为“CREATE EXTENSION hstore”的DB时,Heroku有没有提前做过? – Peeja

回答

34

hstore扩展创建可从外部动态对象调用代码的函数,该对象需要超级用户权限。这就是为什么创建hstore扩展需要超级用户权限。

至于Heroku的,这是我的理解是,他们采用了特殊的扩展白名单模块,它允许用户创建特定扩展名的,即使他们不是超级用户运行。我相信它是基于这个代码:https://github.com/dimitri/pgextwlist。如果您想在数据库中使用相同的功能,您可以尝试自行安装该代码。

+0

你能告诉哪个外部对象扩展使用?正如我想这个对象是在数据库基础设施。 –

相关问题