Ich habe einen PostgreSQL 9.5-Server, auf dem ich Skripte habe, die automatisch Rollen und Datenbanken für Benutzer erstellen. Innerhalb dieser Datenbanken wäre es hilfreich, bestimmte Erweiterungen (z. B. pgcrypto) zu aktivieren, aber so wie ich es verstehe, muss man ein Superuser sein, um ausgeführt zu werden CREATE EXTENSION
. Gibt es eine Möglichkeit, solche Erweiterungen zu aktivieren, ohne sich manuell mit einem Superuser-Konto anzumelden?
11
template1
und dann jede Benutzerdatenbank Erstellen vontemplate1
wieCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Antworten:
Aus den Dokumenten zu Erweiterungen,
Der Wert ist nicht festgelegt
pgcrypto.control
, daher ist er standardmäßig true, was einen SuperUser erfordert.Dies bedeutet, dass Sie nicht
CREATE EXTENSION
nur Eigentümer der Datenbank sein können, obwohl die Dokumente zu CREATE EXTENSION Sie zu der Annahme veranlassen.Ich bemühte mich, es einzustellen
false
, und keine Freude. C ist eine nicht vertrauenswürdige Sprache und Sie werden bekommenAus den Dokumenten auf pg_language
... natürlich können Sie sich als Superuser
c
vertrauen lassenUPDATE pg_language set lanpltrusted = true where lanname = 'c';
. DannCREATE EXTENSION pgcrypto
funktioniert es gut als Nicht-Superuser. Das klingt jedoch nach einer schlechten Idee, wenn Sie sich Sorgen machen müssen, dass Ihre Benutzer die Quelle in Ihr Erweiterungsverzeichnis hochladen und dann in der Datenbank installieren. Das heißt, ich würde nicht so weit gehen. Ich würde einen anderen Weg finden, diese Katze zu häuten.quelle
pg_dump
bringt es also, keine Option zu haben, um zu verhindern, dass Anweisungen zu Erweiterungen ausgegeben werden? Ich muss derzeit externe Textverarbeitungstools verwenden, um diese Anweisungen aus dem von ausgegebenen SQL zu entfernenpg_dump
.