【发布时间】:2014-01-10 11:10:18
【问题描述】:
当我尝试在我的数据库上启用 hstore 时:
=> CREATE EXTENSION IF NOT EXISTS hstore;
ERROR: permission denied to create extension "hstore"
HINT: Must be superuser to create this extension.
我的用户不是超级用户,但是数据库的所有者。
加载扩展需要与创建其组件对象相同的权限。对于大多数扩展,这意味着需要超级用户或数据库所有者权限。运行 CREATE EXTENSION 的用户将成为扩展的所有者,以便以后进行权限检查,以及由扩展脚本创建的任何对象的所有者。
hstore 在做什么需要超级用户权限?它是否会影响我要添加到的数据库之外的集群部分?
进一步的困惑:
The DB user Heroku Postgres provides is not a superuser:
Heroku Postgres 用户被授予对其数据库的所有非超级用户权限。这些包括
SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、@9876543@35@、USAGE、EXECUTE、@9876 .
但是,that user is able to CREATE EXTENSION hstore:
要创建任何受支持的扩展,请使用 heroku pg: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=>
(对于上下文,我正在尝试设置 Dokku 部署,因此与 Heroku 的比较尤为重要。)
【问题讨论】:
-
我猜那是因为它需要加载/绑定本机库 (dll/so),只有超级用户才能这样做。
-
我使用@a_horse_with_no_name,它需要修改服务器进程,所以认为这就是它需要SU的原因,我通常使用SU将其加载为引导程序的一部分,然后再切换到DB所有者,但找不到支持的文档
-
嗯。这是有道理的,但请参阅我对 Heroku 的补充。 Heroku 在设置数据库时是否提前做了一些事情,使非超级用户可以使用
CREATE EXTENSION hstore? -
"Loading an extension requires the same privileges that would be required to create its component objects. For most extensions this means superuser or database owner privileges are needed." 所以大概 hstore 不需要做任何超级用户的事情,或者 Heroku 已经调整了 CREATE EXTENSION 的工作方式。
标签: postgresql heroku hstore