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