Mam serwer PostgreSQL 9.5, na którym mam skrypty automatycznie tworzące role i bazy danych dla użytkowników. W tych bazach danych pomocne byłoby włączenie określonych rozszerzeń (np. Pgcrypto), ale jak rozumiem, aby uruchomić, trzeba być superużytkownikiem CREATE EXTENSION
. Czy istnieje sposób włączenia takich rozszerzeń bez ręcznego logowania przy użyciu konta administratora?
13
template1
a następnie utworzyć bazę danych użytkowników ztemplate1
podobnychCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Odpowiedzi:
Z dokumentów dotyczących rozszerzeń
Wartość nie jest ustawiona
pgcrypto.control
, więc domyślnie jest ustawiona na true, co wymaga SuperUser.Oznacza to, że nie możesz
CREATE EXTENSION
jako zwykły właściciel bazy danych, pomimo tego, w co wierzą ci dokumenty z instrukcji CREATE EXTENSION .Starałem się to ustawić
false
i bez radości. C to niezaufany język, a dostanieszZ dokumentacji na pg_language
... oczywiście możesz
c
zaufaćUPDATE pg_language set lanpltrusted = true where lanname = 'c';
jako superużytkownik. WtedyCREATE EXTENSION pgcrypto
będzie działał dobrze jako nieurządzający. Ale to brzmi źle, jeśli musisz się martwić, że użytkownicy załadują źródło do katalogu rozszerzenia, a następnie zainstalują go w bazie danych. To znaczy, nie posunąłbym się tak daleko. Znalazłbym inny sposób na skórowanie tego kota.źródło
pg_dump
aby zapobiec dumpingowi oświadczeń dotyczących rozszerzeń? Obecnie muszę użyć zewnętrznych narzędzi do przetwarzania tekstu, aby usunąć te instrukcje z SQL zrzuconego przezpg_dump
.