Eu tenho um servidor PostgreSQL 9.5 no qual tenho scripts que criam funções e bancos de dados para usuários automaticamente. Dentro desses bancos de dados, seria útil habilitar extensões específicas (por exemplo, pgcrypto), mas, pelo que entendi, é preciso ser um superusuário para executar CREATE EXTENSION
. Existe uma maneira de habilitar essas extensões sem fazer login manualmente com uma conta de superusuário?
12
template1
e, em seguida, a criação de cada banco de dados de usuário detemplate1
comoCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Respostas:
Nos documentos sobre extensões,
O valor não está definido
pgcrypto.control
, portanto, é padronizado como true, o que requer um superusuário.Isso significa que você não pode ser
CREATE EXTENSION
o mero proprietário do banco de dados, apesar do que os documentos sobre CREATE EXTENSION levam você a acreditar.Eu tentei arduamente configurá-lo
false
, e sem alegria. C é uma linguagem não confiável e você teráDos documentos em pg_language
... é claro que você pode
c
confiarUPDATE pg_language set lanpltrusted = true where lanname = 'c';
como superusuário. EntãoCREATE EXTENSION pgcrypto
funcionará bem como um não superusuário. Mas isso parece uma péssima idéia se você precisar se preocupar com o upload de código-fonte dos usuários para o diretório de extensões e a instalação no banco de dados. Ou seja, eu não iria tão longe. Eu encontraria outra maneira de esfolar esse gato.fonte
pg_dump
para impedir que ele despeje declarações sobre extensões? Atualmente, tenho que usar ferramentas externas de processamento de texto para remover essas instruções do SQL despejado porpg_dump
.