J'ai un serveur PostgreSQL 9.5 sur lequel j'ai des scripts qui créent automatiquement des rôles et des bases de données pour les utilisateurs. Dans ces bases de données, il serait utile d'activer des extensions spécifiques (par exemple pgcrypto), mais si je comprends bien, il faut être un superutilisateur pour fonctionner CREATE EXTENSION
. Existe-t-il un moyen d'activer de telles extensions sans vous connecter manuellement avec un compte superutilisateur?
13
template1
, puis de créer chaque base de données d'utilisateurs à partir detemplate1
commeCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Réponses:
Depuis la documentation sur les extensions,
La valeur n'est pas définie
pgcrypto.control
, donc sa valeur par défaut est true, ce qui nécessite un SuperUser.Cela signifie que vous ne pouvez pas en
CREATE EXTENSION
tant que simple propriétaire de la base de données, malgré ce que les documents sur CREATE EXTENSION vous font croire.J'ai essayé de le régler durement
false
, et pas de joie. C est un langage non fiable et vous obtiendrezDepuis les documents sur pg_language
... bien sûr, vous pouvez faire
c
confiance enUPDATE pg_language set lanpltrusted = true where lanname = 'c';
tant que superutilisateur. EnsuiteCREATE EXTENSION pgcrypto
, fonctionnera bien en tant que non-superutilisateur. Mais cela semble être une mauvaise idée si vous devez vous soucier du téléchargement de la source de vos utilisateurs vers votre répertoire d'extension, puis de son installation dans la base de données. C'est-à-dire que je n'irais pas aussi loin. Je trouverais un autre moyen d'écorcher ce chat.la source
pg_dump
pour l'empêcher de vider les déclarations concernant les extensions? Je dois actuellement utiliser des outils de traitement de texte externes pour supprimer ces instructions du SQL sous-évaluées parpg_dump
.