Когда я пытаюсь включить hstore в моей базе данных:
=> CREATE EXTENSION IF NOT EXISTS hstore;
ERROR: permission denied to create extension "hstore"
HINT: Must be superuser to create this extension.
Мой пользователь не является суперпользователем, но является владельцем базы данных.
В соответствии с документами CREATE EXTENSION:
Загрузка расширения требует тех же привилегий, которые необходимы для создания его объектов-компонентов. Для большинства расширений это означает, что необходимы привилегии суперпользователя или владельца базы данных. Пользователь, который запускает CREATE EXTENSION, становится владельцем расширения для целей более поздних проверок привилегий, а также владельцем любых объектов, созданных расширением script.
Что такое hstore, который требует привилегий суперпользователя? Это влияет на части кластера за пределами базы данных, к которой я добавляю?
Дальше:
Пользователь базы данных Heroku Postgres не является суперпользователем:
Пользователям Heroku Postgres предоставляются все права, отличные от суперпользователя, в их базе данных. К ним относятся
SELECT
,INSERT
,UPDATE
,DELETE
,TRUNCATE
,REFERENCES
,TRIGGER
,CREATE
,CONNECT
,TEMPORARY
,EXECUTE
иUSAGE
.
Однако этот пользователь может создать 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 особенно важно.)