Dlaczego PostgreSQL 9.3 nie uruchamia się na Ubuntu?

13

Z powodzeniem zainstalowałem PostgreSQL 9.3 z repozytorium APT na 2 maszynach wirtualnych z systemem Ubuntu 12.04 i 13.04 ... jednak nie mogę go poprawnie zainstalować na moim hoście z systemem Ubuntu 12.04.

Wygląda na to, że instalacja (tym razem) poszła dobrze, ale być może wystąpił błąd, którego nie rozumiem:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Próbuję więc dodać siebie jako użytkownika PostgreSQL, ale otrzymuję to:

createuser: could not connect to database postgres: 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"?

Nie widzę PostgreSQL działającego na monitorze systemu i nie ma pliku w folderze / var / run / postgresql / ... całkowicie pusty.

EDYCJA: na maszynie wirtualnej znajduje się plik w / var / run / postgresql / o nazwie 9.3-main.pid

W pliku dziennika hosta nie ma nic / var / log / postgresql

Więc ... co się tutaj dzieje, co nie dzieje się na mojej maszynie wirtualnej? Tak jak powiedziałem, inne instalacje na maszynie wirtualnej, w tym PostGIS i PGAdmin, były idealne ... nie mam pojęcia, dlaczego ta maszyna hosta nie przechodzi ...

DPSSpatial
źródło
Czy rzeczywiście masz /var/run/postgresqlkatalog? Na pewnym etapie po udanej instalacji brakowało tego folderu na moim komputerze. Co mówi config o tym katalogu, którego powinien używać?
Colin 't Hart
@ Colin'tHart Mam ten katalog ... jednak nie ma w nim nic ... na maszynie wirtualnej istnieje plik o nazwie 9.3-main.pid Gdzie znajdę te informacje o konfiguracji?
DPSSpatial
postgresql.confw katalogu config, który zgodnie z powyższym jest /etc/postgresql/9.3/main. Powinieneś także zajrzeć do plików dziennika, prawdopodobnie w /var/log/postgresql.
Colin 't Hart
@ Colin'tHart Plik dziennika jest pusty ... Plik konfiguracyjny - i myślę, że o to ci chodzi - mówi # Jeśli plik_pid_zewnętrzny nie jest jawnie ustawiony, nie jest zapisywany żaden dodatkowy plik PID. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial
Czy w tym katalogu jest plik gniazda, czy naprawdę jest on całkowicie pusty?
Colin 't Hart

Odpowiedzi:

16

Moje ustawienia regionalne nie były poprawnie skonfigurowane podczas instalacji PostgreSQL. Czyszczenie i ponowna instalacja nie pomogły. Postępowałem zgodnie z instrukcjami tutaj i to załatwiło sprawę.

Zasadnicze części powiązanych informacji przedstawione poniżej:

Problem pojawił się w następujący sposób:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

Pierwszy był bardzo łatwy do rozwiązania, wykonując:

#dpkg-reconfigure locales

... i wybierając preferowane lokalizacje.

Ale potem PostgreSQL wciąż odmówił uruchomienia. Wynika to z faktu, że proces instalacji próbował utworzyć klaster w czasie instalacji, ale z powodu złych ustawień regionalnych tego nie zrobiono. Musimy więc powtórzyć ten krok, wykonując:

#pg_createcluster 9.3 main --start

(Dla wersji PostgreSQL 9.3)

Po tym kroku PostgreSQL uruchamia się bezbłędnie przez

#/etc/init.d/postgresql start
Marko Benko
źródło
2
Uratowałem mi życie. To naprawdę szczęście, że czyszczenie i ponowne instalowanie nie pomaga nawet po poprawieniu ustawień regionalnych. To zmarnowało 2 godziny mojego życia :(
Escher
W przypadku, pg_createclustermówi, że klaster już istnieje trzeba upuścić go najpierw (Spowoduje to wykasowanie wszystkich danych w nim, więc upewnij się, że masz kopię zapasową) pg_dropcluster 9.3 main.
Florian Brucker,
6

Mam nadzieję, że już rozwiązałeś ten problem, ale mam podobny problem, który wydaje się mieć inne źródło i być może moje doświadczenie pomoże, jeśli nadal będziesz mieć problem.

Mój problem z Ubuntu w wersji 9.3 dotyczy tego, że katalog gniazda jest katalogiem przejściowym w / run. Zasadniczo skrypt init.d powinien zająć się tworzeniem katalogu gniazda w katalogu / run / postgresql, jeśli nie istnieje on podczas akcji startowej. Tak będzie zawsze po ponownym uruchomieniu komputera.

Problem polega jednak na tym, że skrypt init.d zakończy działanie przed wykonaniem akcji start, jeśli katalog gniazda nie istnieje. Wynika to z tego, że wywołanie pg_lsclusters nie powiedzie się bez katalogu gniazda, co z kolei uniemożliwia akcji uruchomienia utworzenie katalogu gniazda.

Nie zorientowałem się, jakie jest najlepsze rozwiązanie, ale jeśli przeniosę logikę tworzenia katalogu gniazda z akcji startowej do przed wywołaniem pg_lsclusters, będę mógł uruchomić serwer po ponownym uruchomieniu bez problemu.

Oto część akcji startowej, która obsługuje tworzenie katalogu gniazda:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Opublikuję aktualizację, jeśli podstawowa przyczyna tego stanie się dla mnie jasna, ponieważ wyraźnie nie może to być oczekiwane zachowanie.

UZUPEŁNIENIE:

Myślę, że przyczyną tego problemu był brak dobrej wartości skonfigurowanej dla katalogów unix_socket_directories . W wersji 9.2 tą opcją konfiguracji był katalog unix_socket_directory, który usunąłem zamiast przełączania na katalog uni__ocket_directory. Ponieważ ustawiłem wartość dla katalogów unix_socket_directories, nie miałem żadnych problemów z uruchomieniem serwera.

tdg5
źródło
dziękuję @ tdg5 !!! Nie rozwiązałem tego, ale myślę, że sprowadza się to do kilku złych instalacji na moim komputerze. Instalacja z repozytorium Apt PostgreSQL na świeżej instalacji ubuntu rozwiązała moje problemy ...
DPSSpatial
3
@mapBaker - Zaktualizowałem swoją odpowiedź, aby uwzględnić podstawową przyczynę problemu z uruchomieniem PG 9.3 w mojej konkretnej sytuacji. Być może będzie to również pomocne dla ciebie.
tdg5
1
Mój PG9.3 nie uruchomił się po ponownym uruchomieniu. Dodanie wiersza „unix_socket_directories = '/ var / run / postgresql” do postgresql.conf w wersji 9.3 rozwiązało to. Dzięki
alfonx,
Dzięki! Pracuję nad tym przez chwilę, cieszę się, że mogę znaleźć ten samorodek!
Serban Tanasa,
3

Miałem kilka problemów z plikiem gniazd, w twoim przypadku /var/run/postgresql/.s.PGSQL.5432

upewnij się, że katalog / var / run / postgresql istnieje i jest zapisywalny przed uruchomieniem postgresql. Aby uzyskać więcej informacji, zobacz tę dyskusję .

również podczas łączenia użyj flagi -h:

psql -h localhost 

i zobacz, czy to rozwiąże problem.

Joe Love
źródło
1

Wydaje się, że to rozwiązuje problem w Ubuntu:

Edytuj postgresql.conf:

unix_socket_directories='/var/run/postgresql

Teraz zrób service postgresql start

sorin
źródło
1

Jestem nowy w PSQL, ale rozwiązałem problem, edytując start.conf Skomentowałem ustawienie „auto” do ręcznego zarządzania serwerem, ale potrzebuje wartości: auto, manual lub wyłączone.

EGD

Ernesto
źródło
1

Po mojej stronie skrypt startowy jest niepoprawny. Pliki konfiguracyjne są instalowane w /etc/postgresql/9.3/main, ale skrypt /usr/share/postgresql-common/init.d-functions szuka w

for c in /etc/postgresql/"$2"/*; do 

Zamień ten wiersz na

for c in /etc/postgresql/"$2"/main; do
k_o_
źródło
-2

Wszystko,

po pewnym kopaniu znalazłem (a) rozwiązanie tutaj:

http://ubuntuforums.org/showthread.php?t=869080

Który zawierał te instrukcje:

Uruchom w terminalu:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Teraz mój serwer jest uruchomiony !!!

EDYCJA : po restarcie serwer nadal nie działa ...

Doceniamy wszelkie przemyślenia, dlaczego musiałem to uruchomić!

DPSSpatial
źródło
Czy na pewno działa 9.3? Numer wersji wydaje się podejrzany ...
dezso
@dezso przepraszam, zapomniałem zmienić wersję #, kiedy wkleiłem te polecenia ... to wszystko w wersji 9.3 ...
DPSSpatial
Może być konieczne określenie portu. Domyślny port jest używany przez starą instalację Postgres. Twoja nowa instalacja najprawdopodobniej używa portu 5433, ale jest to coś, co możesz na pewno sprawdzić, czytając plik konfiguracyjny postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581
1
Może to być obejście, ale najwyraźniej nie jest to dobre rozwiązanie. Ten jak naprawia problem dba.stackexchange.com/a/91511/8099
sorin