Tengo un servidor PostgreSQL 9.5 en el que tengo scripts que crean roles y bases de datos para los usuarios automáticamente. Dentro de estas bases de datos, sería útil habilitar extensiones específicas (por ejemplo, pgcrypto), pero según tengo entendido, uno debe ser un superusuario para ejecutarse CREATE EXTENSION
. ¿Hay alguna manera de habilitar tales extensiones sin iniciar sesión manualmente con una cuenta de superusuario?
13
template1
y luego crear cada base de datos de usuario de metemplate1
gustaCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Respuestas:
De los documentos sobre Extensiones,
El valor no está establecido
pgcrypto.control
, por lo que su valor predeterminado es verdadero, lo que requiere un Superusuario.Esto significa que no puede
CREATE EXTENSION
ser el mero propietario de la base de datos, a pesar de lo que los documentos de CREATE EXTENSION lo llevan a creer.Traté de configurarlo
false
, y sin alegría. C es un lenguaje no confiable y obtendráDe los documentos en pg_language
... por supuesto, puedes
c
confiar en tiUPDATE pg_language set lanpltrusted = true where lanname = 'c';
como superusuario. EntoncesCREATE EXTENSION pgcrypto
funcionará bien como no superusuario. Pero, eso suena como una mala idea si tiene que preocuparse de que sus usuarios carguen la fuente en su directorio de extensiones y luego la instalen en la base de datos. Es decir, no iría tan lejos. Encontraría otra forma de pelar a este gato.fuente
pg_dump
para evitar que descargue declaraciones sobre extensiones? Actualmente tengo que usar herramientas de procesamiento de texto externo para eliminar esas declaraciones del SQL descargado porpg_dump
.