postgresql - ¿Por qué solo un superusuario CREA EXTENSIÓN hstore, pero no en Heroku?
(1)
La extensión hstore crea funciones que llaman al código de un objeto dinámico externo, que requiere privilegio de superusuario. Es por eso que la creación de la extensión hstore requiere privilegio de superusuario.
En cuanto a Heroku, tengo entendido que se están ejecutando con un módulo especial de extensión de lista blanca, que permite a los usuarios crear ciertas extensiones aunque no sean superusuarios. Creo que está basado en este código: https://github.com/dimitri/pgextwlist . Puede intentar instalar ese código usted mismo si desea la misma funcionalidad en sus bases de datos.
Cuando intento habilitar hstore en mi base de datos:
=> CREATE EXTENSION IF NOT EXISTS hstore;
ERROR: permission denied to create extension "hstore"
HINT: Must be superuser to create this extension.
Mi usuario no es un superusuario, pero es el propietario de la base de datos.
De acuerdo con los documentos CREATE EXTENSION :
Cargar una extensión requiere los mismos privilegios que serían necesarios para crear sus objetos componentes. Para la mayoría de las extensiones, esto significa que se necesitan privilegios de superusuario o propietario de la base de datos. El usuario que ejecuta CREATE EXTENSION se convierte en el propietario de la extensión para fines de verificaciones de privilegios posteriores, así como también el propietario de cualquier objeto creado por el script de la extensión.
¿Qué está haciendo hstore que requiere privilegios de superusuario? ¿Está afectando partes del clúster fuera de la base de datos en que lo estoy agregando?
Mayor confusionidad
El usuario de BD que Heroku Postgres proporciona no es un superusuario :
A los usuarios de Heroku Postgres se les otorgan todos los permisos de no superusuario en su base de datos. Estos incluyen
SELECT
,INSERT
,UPDATE
,DELETE
,TRUNCATE
,REFERENCES
,TRIGGER
,CREATE
,CONNECT
,TEMPORARY
,EXECUTE
yUSAGE
.
Sin embargo, ese usuario puede CREAR EXTENSION hstore :
Para crear cualquier extensión compatible, abra una sesión con heroku pg: psql y ejecute el comando apropiado:
$ 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=>
(Por contexto, estoy intentando configurar una implementación de Dokku , por lo que la comparación con Heroku es especialmente importante).