[Ubuntu 16.04] Zainstalowałem postgresql 9.5 wraz z zależnościami:
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev
Kiedy chcę uruchomić psql
, otrzymuję:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Ale /var/run/postgresql/
jest pusty. Po ponownym uruchomieniu posgresql wszystko wydaje się w porządku:
$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3523 (code=exited, status=0/SUCCESS)
ale jeśli czek ps aux
nie ma takiego PID (dlaczego?)
Całkowita ponowna instalacja wcale nie pomaga. Jak mogę to naprawić?
postgresql
mike927
źródło
źródło
Odpowiedzi:
Jest to charakterystyczne dla systemowej integracji PostgreSQL w Xenial.
Jednostka usługowa postgresql zainstalowana przez pakiet powszechny postgresql jest tylko pozorną usługą, która powoduje, że faktyczna usługa [email protected] jest uruchamiana przez zależność. Zależność tę można zobaczyć, uruchamiając polecenie
Zależność ta nie jest trwała, ale generowana podczas rozruchu systemu przez generator systemowy,
/lib/systemd/system-generators/postgresql-generator
który jest również dostarczany z pakietem wspólnym postgresql. Generator sprawdza, czy tryb uruchamiania w pliku/etc/postgresql/9.6/main/start.conf
jest ustawionyauto
, a jeśli tak, ustawia zależność, która następnie powoduje uruchomienie instancji 9.6-main.(Dokładniej, sprawdza wszystkie podkatalogi konfiguracji
/etc/postgresql/*/*
i tworzy zależności dla wszystkich instancji skonfigurowanych do automatycznego uruchamiania, ale w instalacji domyślnej będzie tylko jedna instancja.)Z powodu ograniczeń systemowych generatorów (patrz
man systemd.generator
) proces ten może się nie powieść, powodując brak zależności po ponownym uruchomieniu. Systemd uruchomi wtedy tylko usługę zastępczą , piszącdo dziennika, ale poza tym nic nie robiąc. Próba ręcznego uruchomienia usługi przez
po prostu odtworzy ten wynik. Uruchamianie polecenia
ręcznie jako root uruchomi ponownie generator i w większości przypadków naprawi problem do następnego uruchomienia.
Aby trwale rozwiązać problem, musisz znaleźć przyczynę niepowodzenia generatora podczas uruchamiania. Możliwe przyczyny można znaleźć na stronie systemd.generator. W moim przypadku był to plik konfiguracyjny PostgreSQL,
/etc/postgresql/9.6/main/postgresql.conf
który został dowiązany symbolicznie do innego systemu plików, który nie był jeszcze dostępny, gdy generator uruchomił się wcześnie podczas rozruchu.postgresql-generator
sprawdza istnienie tego pliku, nawet jeśli nie jest on potrzebny.źródło
Rozszerzając odpowiedź Tilmana, ale za mało Kudo, aby skomentować ...
Jeśli nie potrzebujesz, aby usługa nazywała się postgresql i nie dbasz o usługę manekina opakowania, powinna działać tylko bezpośrednia kontrola prawdziwej usługi. Jego nazwa to: postgresql@$version-$cluster.service W twoim przypadku powinno to być w skrócie postgresql-9.5-main . Lubię zaczynać
i zatrzymać:
Status daje również znacznie lepsze i dokładne informacje niż w przypadku automatycznie generowanej usługi pakowania.
W przypadku wersji 9.6 wygląda to tak:
źródło
W moim przypadku było to związane z nieprawidłowo skonfigurowanymi ustawieniami narodowymi.
Znalazłem rozwiązanie w tej odpowiedzi dba.stackexchange.com :
sudo dpkg-reconfigure locales
do generowania niezbędnych ustawień narodowychsudo pg_dropcluster 9.5 main
(spowoduje to usunięcie wszystkich danych w klastrze!)sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
źródło
lepiej byłoby użyć systemowych skryptów startowych z Ubuntu 16.04, skrypty init mogą obecnie nie działać poprawnie. Postgres 9.5 znajduje się już w repozytoriach Ubuntu, więc spróbuj, zamiast tego, powinien uruchomić system.
źródło
Kolejny „ugryzł to”.
pg_upgradecluster
Rzeczywiście opuścił wersji docelowej (9,6) w trybie „Manual” na porcie 5433 i wersji źródłowej (9,5) na porcie 5432.Nawet po
pg_dropcluster 9.5
. Edycja pliku start.conf nie pomogła, ale podpowiedź miała zostać użytasystemctl daemon-reload
, ponieważ na podstawie tego pliku konfiguracyjnego generator decyduje, czy dowiązać plik usługi:Jeśli więc klaster, który chcesz uruchomić, nie ma słowa „auto” w pliku start.conf, musisz przeładować system (lub uruchomić ponownie), aby włączyć go w czasie uruchamiania.
Nadal muszę to zweryfikować przy ponownym uruchomieniu, ale biorąc pod uwagę powyższe dość pewny, że to był problem.
źródło
Wyłączyłem magiczną „super usługę” w ten sposób:
Następnie aktywowałem usługę betonu:
Po ponownym uruchomieniu wszystko działało ponownie.
źródło
Miałem ten sam błąd, stracone godziny, proste rozwiązanie. Sprawdź to SO pytanie i moją odpowiedź, czyli:
źródło
Miałem ten problem z innego powodu: uprawnienia do katalogu. Miałem pełny chmod taki jak ten:
To powoduje, że katalog nie jest wykonywalny, co uniemożliwia postgresowi jego odczytanie.
źródło
Miałem ten sam problem po sprawdzeniu znalezionego problemu z uprawnieniem ssl-cert-snakeoil.key.
Ustaw własność
chown root: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
i zrobił czysty restart.
źródło