Из документов по расширениям,
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
?