Jak naprawić instalację PostgreSQL

18

Uaktualniłem niedawno z Maverick do Natty i wszystko poszło dobrze, z wyjątkiem podczas aktualizacji dist coś poszło nie tak z PostgreSQL. Od tego czasu próbowałem ponownie zainstalować, usunąć, a nawet wyczyścić go za pomocą polecenia „sudo apt-get purge postgresql”, ale nadal pojawia się ten sam błąd, bez względu na to, co robię. Patrz poniżej. Przed aktualizacją działało dobrze. Każda pomoc byłaby bardzo mile widziana. Dzięki!

Setting up postgresql-common (114) ...
 * Starting PostgreSQL 8.4 database server         * The PostgreSQL server failed to start. Please check the log output:
2011-05-19 11:49:41 EDT LOG:  could not bind IPv4 socket: Address already in use
2011-05-19 11:49:41 EDT HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2011-05-19 11:49:41 EDT WARNING:  could not create listen socket for "127.0.0.1"
2011-05-19 11:49:41 EDT FATAL:  could not create shared memory segment: Invalid argument
2011-05-19 11:49:41 EDT DETAIL:  Failed system call was shmget(key=5432001, size=37879808, 03600).
2011-05-19 11:49:41 EDT HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 37879808 bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 103).
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

[fail]
invoke-rc.d: initscript postgresql, action "start" failed.
dpkg: error processing postgresql-common (--configure):
 subprocess installed post-installation script returned error exit status 1
przewodowy
źródło
czy możesz zamieścić dane wyjściowe „netstat -na | grep 5432”
freethinker
Uruchomienie tego polecenia nic nie daje. Jakieś inne pomysły?
przewodowy
otwórz /etc/init.d/postgresqli dodaj a set -xdo wiersza po #!/bin/bashi zrób a sudo /etc/init.d/postgresql restarti opublikuj wynik
freethinker
Zastąpiłem zestaw -e ustawieniem -x i oto co dostałem: pastebin link
przewodowy

Odpowiedzi:

29

Musisz zwiększyć maksymalny rozmiar fragmentu pamięci współużytkowanej. Jądro Linux pozwala na jednoczesne przydzielenie (znane jako parametr SHMMAX)

Musisz edytować /etc/sysctl.confi dodać następujący wiersz:

kernel.shmmax = 41943040

(gdzie 41943040jest rozmiar pamięci w bajtach, tj. 40 megabajtów. W systemie produkcyjnym prawdopodobnie chcesz ustawić tę wartość znacznie wyżej - dokumentacja Postgres zaleca, aby zacząć od 1/4 dostępnej pamięci)

Następnie uruchomić

sudo sysctl -p

i ponownie uruchom postgres.

Alternatywnie możesz edytować /etc/postgresql/<version>/main/postgresql.confi zmniejszać wartość shared_buffersparametru.

To jest błąd, więcej informacji tutaj

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/264336

(istnieje również /etc/sysctl.d/30-postgresql-shm.confplik, który powinien być używany do tego celu, ale nie wydaje się, aby był dołączony do głównej konfiguracji, więc edycja go nie ma wpływu)

wolno-myśliciel
źródło
Zrobiłem dokładnie tak, jak powiedziałeś powyżej, a nawet uruchomiłem ponownie komputer, ale nadal otrzymuję dokładnie ten sam błąd, co napisałem w pierwotnym pytaniu. W tym momencie jestem gotów po prostu odinstalować całość i zacząć od zera, ale z jakiegoś powodu apt-get próbuje uruchomić serwer podczas odinstalowywania, więc nie mogę tego zrobić. Dzięki za wszelką pomoc! Bardzo to doceniam.
przewodowe
spróbuj podbić shmmax dalej .. jest to problem z pamięcią współdzieloną. Spójrz na link, który opublikowałem, zawiera więcej informacji i więcej obejść
freethinker
10
Rozwiązaniem było edytowanie /etc/sysctl.conf i dodanie linii kernel.shmmax = 41943040, a następnie uruchomienie sudo sysctl -p i zrestartowanie postgreSQL: sudo /etc/init.d/postgresql start. Teraz zaczyna się bez błędu. Dziękuję bardzo!!
przewodowe
1
@ Freetinker, To nie działa w 12.04.
Cerin
1
@wired, Dzięki, twoja poprawka działa dla mnie. Wygląda na to, że /etc/sysctl.d/30-postgresql-shm.conf jest całkowicie ignorowany ...
Cerin
-2

Najprawdopodobniej stary Postgres nadal działa.

Dobry pomysł, jak wskazał wolnomyśliciel, aby bardzo dokładnie sprawdzić, co działa na tym porcie.

Gdy wiesz, że to Postrgres, prawdopodobnie zechcesz go zabić:

# Find PID
ps axf | grep post

kill PID

Następnie możesz uruchomić nową wersję:

/etc/init.d/postgresql start

Zastanawiam się, dlaczego menedżer pakietów nie był w stanie zatrzymać starszej wersji.

Aleksandr Levchuk
źródło
Nie pojawia się z 'ps axf | grep post ”. Jestem prawie pewien, że to nie działa.
przewodowe