Из документов по расширениям,
superuser (логическое значение) Если этот параметр имеет значение true (по умолчанию), только суперпользователи могут создавать расширение или обновлять его до новой версии. Если установлено значение false, требуются только те привилегии, которые необходимы для выполнения команд в сценарии установки или обновления.
Значение не задано pgcrypto.control, поэтому по умолчанию используется значение true, для которого требуется SuperUser.
Это означает, что вы не можете быть CREATE EXTENSIONпросто владельцем базы данных, несмотря на то, что документы по CREATE EXTENSION заставляют вас верить.
Я старался изо всех сил false, и радости не было. C - ненадежный язык, и вы получите
ОШИБКА: отказано в разрешении для языка c
Из документов на pg_language
Только суперпользователи могут создавать функции на ненадежных языках.
... конечно, вы можете cдоверять UPDATE pg_language set lanpltrusted = true where lanname = 'c';как суперпользователь. Тогда CREATE EXTENSION pgcryptoбудет нормально работать как не суперпользователь. Но это звучит как плохая идея, если вам нужно беспокоиться о том, что ваши пользователи загружают исходный код в каталог расширений и затем устанавливают его в базу данных. То есть я бы не пошел так далеко. Я бы нашел другой способ снять кожу с этой кошки.
template1и затем создать базу данных каждого пользователя изtemplate1лайковCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?