Nos documentos sobre extensões,
superusuário (booleano) Se esse parâmetro for verdadeiro (que é o padrão), apenas os superusuários poderão criar a extensão ou atualizá-la para uma nova versão. Se estiver definido como false, apenas os privilégios necessários para executar os comandos no script de instalação ou atualização serão necessários.
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 EXTENSIONo 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á
ERRO: permissão negada para o idioma c
Dos documentos em pg_language
Somente superusuários podem criar funções em idiomas não confiáveis.
... é claro que você pode cconfiar UPDATE pg_language set lanpltrusted = true where lanname = 'c';como superusuário. Então CREATE EXTENSION pgcryptofuncionará 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.
template1e, em seguida, a criação de cada banco de dados de usuário detemplate1comoCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?