Uruchamianie serwera PostgreSQL w systemie Void Linux. Po zainstalowaniu uruchomiono initdb jako użytkownik systemu operacyjnego „postgres”:

[user@host]$ sudo -u postgres -i $ initdb -D "/var/lib/postgresql/data" 

Otrzymane dane wyjściowe:

tworzenie katalogu / var / lib / postgresql / data … ok tworzenie podkatalogów … ok wybieranie domyślnych max_connections … 100 wybieranie domyślnych shared_buffers … 128MB wybieranie dynamicznych współdzielonych implementacja pamięci … posix tworzenie plików konfiguracyjnych … ok uruchamiam skrypt bootstrap … ok wykonuję inicjalizację po bootstrapie … locale: Nie można ustawić LC_MESSAGES na domyślne locale: Nie ma takiego pliku lub katalogu ok synchronizowanie danych na dysk … ok

OSTRZEŻENIE: włączanie uwierzytelniania „trust” dla połączeń lokalnych Możesz to zmienić edytując pg_hba.conf lub używając opcji -A lub –auth-local i –auth-host, następnym razem uruchomisz initdb.

Sukces. Możesz teraz uruchomić serwer bazy danych za pomocą: pg_ctl -D / var / lib / postgresql / data -l plik dziennika początek

Następnie przystąpiłem do tworzenia usługi, przyznania prawa własności do „postgres” i uruchomienia jej:

[user@host]$ ln -s /etc/sv/postgresql /var/service [user@host]$ sudo chown postgres: /var/service/postgresql [user@host]$ sudo sv start postgresql [user@host]$ ls -l /var/service/postgresql lrwxrwxrwx 1 postgres postgres 18 nov 2 17:05 /var/service/postgresql -> /etc/sv/postgresql 

Uruchomiony:

[user@host]$ sudo -u postgres psql ... 

wyświetli następujący błąd:

psql: FATAL: role "postgres" does not exist 

Próbowałem przyznać prawo własności do /etc/sv/postgresql do „postgres”, ale bez powodzenia.

To były moje źródła:

https://wiki.voidlinux.eu/PostgreSQL

Błąd PostgreSQL: błąd krytyczny: rola „nazwa użytkownika” nie istnieje

Nie wiem, co robić dalej.

EDYCJA: Natknąłem się na psql: FATAL: role „postgres” nie istnieje . Nie mogę uruchomić psql -l, ponieważ pojawia się ten sam błąd, niezależnie od tego, którego użytkownika uruchomię psql jako.

Komentarze

  • Powiedz nam, którą wersję Postgres próbujesz zainstalować i skąd masz pakiet. Komunikat o błędzie jest wystarczająco jasny: role "postgres" does not exist: nie ma roli bazy danych o nazwie " postgres ". Czy jest to jedyna instalacja Postgresa na tym samym komputerze? (Więc na pewno łączysz się z właściwą instancją?) Jeśli tak, pytanie brzmi: jaka rola bazy danych jest konfigurowana przez twoją instalację. Nie ' nie znam na tyle Void Linuksa ani menedżera pakietów XPBS, aby powiedzieć więcej. Może lepiej pasować do superuser.SE lub unix.SE.
  • Wersja to postgresql-9.6.10_1. Tak, to ' jest jedyną instalacją PostgreSQL w moim systemie i działa tylko jedna instancja serwera. Powinienem więc przenieść pytanie? Nie ' nie wiem …
  • Nie jestem pewien, czy są tu jacyś eksperci VOID Linux lub XPBS … Kluczem jest znalezienie nazwy Rola Postgres utworzona przez initdb, a następnie połącz się z użytkownikiem systemu operacyjnego o tej samej nazwie, aby uzyskać dostęp przez " trust " metoda uwierzytelniania. Oczywiście nie " postgres " (co byłoby rozsądną wartością domyślną).
  • Tak myślałem, ale ' nie mogliśmy znaleźć tej roli. Tak jak wspomniałem w pytaniu, nie mogę w ogóle ' t psql, więc nie mogę ' nie wyszczególnić istniejących ról. Czy może jest coś istotnego zapisanego w pliku postgresql.conf? Coś, czego powinienem szukać? Mam ' rolę i otrzymałem session_replication_role = 'origin'. Wydaje mi się, że nie jest to zbyt przydatne.
  • :%s/XPBS/XBPS/g

Odpowiedź

Nie jest to pełna odpowiedź, ale rozważ podręcznik dotyczący initdb tutaj :

-U username
--username= username

Wybiera nazwę użytkownika superużytkownika bazy danych. Domyślnie jest to nazwa efektywnego użytkownika uruchamiającego initdb. Naprawdę nie jest ważne, jak nazywa się superużytkownik, ale można zachować zwyczajową nazwę postgres, nawet jeśli nazwa użytkownika systemu operacyjnego jest inna.

Znaczenie …

  1. Podczas uruchamiania initdb jako użytkownik systemu operacyjnego postgres, początkowa rola superużytkownika DB to także postgres – w standardowym Postgresie. Słyszałem o systemach naginających tę zasadę …

  2. Powinieneś móc wymusić nazwę postgres za pomocą --username=postgres dla początkowego superużytkownika – chyba że Twój pakiet poważnie zepsuł to wszystko.

Komentarze

  • Wow , to wskazało mi właściwy kierunek, w porządku. Wiedziałem, że widziałem gdzieś flagę -U i to było stąd: stackoverflow.com/questions/50746147/… Mogłem źle przeczytać odpowiedź Laurenz ', ale uruchomiłem initdb -U UTF8 -D /var/lib/postgresql/data i zgadnij co początkowa rola superużytkownika DB była. W każdym razie prawie zawiesiłem cały system z powodu wyczerpania. Dość produktywny dzień. Dziękuję za poświęcenie Erwin, bardzo cenimy twoją pomoc.
  • @Jakov: -U UTF8. Auć. Miało być -E UTF8 Zakładam? Przepraszam za stracony dzień z powodu jednego podstępnie zaszyfrowanego listu. Z drugiej strony: gdybyś na początku pokazał swoje aktualne polecenie w pytaniu, moglibyśmy zaoszczędzić pół dnia …

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *