Postgres - FATAL: pliki bazy danych są niekompatybilne z serwerem

185

Po zrestartowaniu MacBooka Pro nie mogę uruchomić serwera bazy danych:

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Sprawdziłem logi i w kółko pojawia się następujący wiersz:

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.0.4.

Wersja 9.0.4 była preinstalowana na Macu, 9.2 [.4] to wersja, którą zainstalowałem przez Homebrew. Jak wspomniano, działało to przed ponownym uruchomieniem, więc w rzeczywistości nie może to być problem z kompilacją. Uruchomiłem również ponownie initdb /usr/local/var/postgres -E utf8i plik nadal istnieje.

Niestety, jestem całkiem nowy w Postgres, więc każda pomoc byłaby bardzo mile widziana.

klaffenboeck
źródło
1
Jak zaczynasz postgres? Czy na pewno Twój skrypt startowy wskazuje na nową wersję? Ponieważ na podstawie komunikatów o błędach myślę, że obie wersje są teraz instalowane obok siebie.
fvu
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- a odpowiedź brzmiserver starting
klaffenboeck
1
Kiedy szukasz plików o nazwie pg_ctl , jestem prawie pewien, że znajdziesz 2 kopie. A ta, która which pg_ctlbędzie pasować, będzie starą wersją, a druga będzie nową wersją.
fvu
bieganie pg_ctl --versiondajepg_ctl (PostgreSQL) 9.2.4
klaffenboeck
2
@EvanCarroll Oczywiście, że tak. Myślę, że teraz przenieśli go, aby spakować go w środku Server.appi ukryli, aby używać niestandardowego portu i katalogu gniazda unix. Wreszcie!
Craig Ringer

Odpowiedzi:

363

Jeśli niedawno zaktualizowałeś do wersji 11 lub 12 z 10.x , możesz uruchomić poniższe polecenie, aby zaktualizować katalog danych postgres z zachowaniem wszystkich danych:

brew postgresql-upgrade-database

Powyższe polecenie jest pobierane z danych wyjściowych programu brew info postgres

Gowtham Gopalakrishnan
źródło
2
To działało jak urok, jednak po tym, jak zadziałało, wprowadziło drugi błąd, pamiętaj, aby zaktualizować bazę danych utworzoną przez initdb za pomocą, brew postgresql-upgrade-databasea następnie zrestartuj postgres
Shemogumbe
Pracował również nad 9,5 do 11. Brawa za pokazanie, jak używać brew info.
yacc
2
Od 10 do 11,5. Ratujesz życie. <3
Thomas
4
Działa również od 11 do 12 lat.
stevex
1
Działa od 9,5 do 12 !!
Augusto Samamé Barrientos
169

Jeśli szukasz opcji jądrowej (usuń wszystkie dane i uzyskaj nową bazę danych), możesz:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

a następnie będziesz musiał przejść do rake db:setupi rake db:migratez aplikacji Rails, aby ponownie przeprowadzić konfigurację.

Meekohi
źródło
3
Jeśli powyższe nadal nie działa (tak było w moim przypadku), spróbuj podać nową nazwę katalogu danych initdb, np. / Usr / local / var / postgres95.
mpelzsherman
btw, zaraz po tym prawdopodobnie będziesz musiał uruchomić, createuser -s your_rails_appaby utworzyć użytkownika postgres railsów. Zobacz stackoverflow.com/questions/11919391/…
Meekohi,
38

Spróbuj tego: https://gist.github.com/joho/3735740

U mnie zadziałało idealnie. W końcu generuje również 2 skrypty bash do sprawdzenia bazy danych i usunięcia starego klastra. Naprawdę niesamowite.

zobacz: http://www.postgresql.org/docs/9.2/static/pgupgrade.html, aby dowiedzieć się więcej.

gdurelle
źródło
2
Udało mi się idealnie z migracją z 9,4 do 9,5.
tftdias
Pracowałem też dla mnie z migracją z 9.3.4 do 9.5.2.
Steve Jorgensen
1
Oto kroki aktualizacji wersji 9.5.5 do 9.6.1 przy użyciu Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis
To zdecydowanie powinna być najlepsza odpowiedź !! I bez utraty danych.
FlorianB
9

Znalezione w Internecie to rozwiązanie działa dobrze dla mnie.

Kiedy próbowałem uruchomić serwer postgresql po aktualizacji do OS X 10.10 Yosemite, napotkałem kolejny problem:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

OK, spójrzmy na logi serwera:

cat /usr/local/var/postgres/server.log

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.5.

Musimy więc wykonać kilka kroków po aktualizacji postgresql:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

mv /usr/local/var/postgres /usr/local/var/postgres92

brew update

brew upgrade postgresql

initdb /usr/local/var/postgres -E utf8

pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres

cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

rm -rf /usr/local/var/postgres92

Otóż ​​to.

Gianluca Musa
źródło
1
Wykonałem powyższe kroki, aby zaktualizować z 9.53 do 10.0. Polecenie pg_upgrade zostało nieco zaktualizowane. Nowe polecenie to pg_upgrade -b /usr/local/Cellar/postgresql/9.5.3/bin/ -B /usr/local/Cellar/postgresql/10.0/bin -d / usr / local / var / postgres95 -D / usr / local / var / postgres
techvineet
lepsze rozwiązanie poniżej
Gady
8

Jeśli chcesz zachować poprzednią wersję postgres, użyj brew switch:

$ brew info postgresql

postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
  postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/9.6.3 (3,259 files, 36.6MB)
  Poured from bottle on 2017-07-09 at 22:15:41
/usr/local/Cellar/postgresql/10.5 (1,705 files, 20.8MB) *
  Poured from bottle on 2018-11-04 at 15:13:13

$ brew switch postgresql 9.6.3
$ brew services stop postgresql
$ brew services start postgresql

W przeciwnym razie, należy rozważyć ten napar komendę migracji istniejących danych: brew postgresql-upgrade-database. Sprawdź kod źródłowy .

peresleguine
źródło
1

Zdarzyło mi się to, gdy próbowałem uruchomić Postgres12 z zamontowanym wolumenem postgres11. Po prostu usunięcie zamontowanego woluminu dla postgres11 i ponowne uruchomienie działało dla mnie.

Wcześniej używałem:

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11

Usunąłem / Users / champ / postgres i zrestartowałem postgres 12, używając

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
anuj kumar
źródło