Postgres - FATAL: file database tidak kompatibel dengan server


186

Setelah memulai ulang MacBook Pro saya, saya tidak dapat memulai server basis data:

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"?

Saya memeriksa log dan baris berikut muncul berulang-ulang:

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.

9.0.4 adalah versi yang telah diinstal sebelumnya pada mac, 9.2 [.4] adalah versi yang saya instal melalui Homebrew. Seperti yang disebutkan, ini dulu berfungsi sebelum restart, jadi itu sebenarnya bukan masalah kompilasi. Saya juga menjalankan ulang initdb /usr/local/var/postgres -E utf8dan file masih ada.

Sayangnya, saya cukup baru di Postgres, jadi bantuan apa pun akan sangat dihargai.


1
Bagaimana Anda memulai postgres? Apakah Anda yakin naskah naskah Anda mengarah ke versi yang baru? Karena berdasarkan pada pesan kesalahan saya pikir kedua versi diinstal berdampingan sekarang.
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- dan jawabannya adalahserver starting
klaffenboeck

1
Ketika Anda mencari file bernama pg_ctl saya cukup yakin Anda akan menemukan 2 salinan. Dan yang cocok which pg_ctladalah versi yang lama, dan yang lainnya adalah versi yang baru.
fvu

berlari pg_ctl --versionmemberipg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@ EvanCarroll Tentu melakukannya. Saya pikir sekarang mereka telah memindahkannya ke bundel di dalam Server.appdan menyembunyikannya untuk menggunakan port non-default dan direktori unix socket. Akhirnya!
Craig Ringer

Jawaban:


366

Jika Anda baru saja memutakhirkan ke 11 atau 12 dari 10.x Anda dapat menjalankan perintah di bawah ini untuk memutakhirkan direktori data postgres Anda yang menyimpan semua data:

brew postgresql-upgrade-database

Perintah di atas diambil dari output brew info postgres


2
Ini bekerja seperti mantra, namun, setelah berhasil, itu memperkenalkan kesalahan kedua, ingatlah untuk meningkatkan db yang dibuat oleh initdb menggunakan brew postgresql-upgrade-databasekemudian restart postgres
Shemogumbe

Bekerja pada 9,5 hingga 11 juga. Kudos untuk juga menunjukkan cara menggunakan brew info.
yacc

2
Dari 10 hingga 11,5. Anda adalah penyelamat. <3
Thomas

4
Bekerja untuk 11 hingga 12 juga.
stevex

1
Bekerja mulai 9,5 hingga 12 !!
Augusto Samamé Barrientos

169

Jika Anda mencari opsi nuklir (hapus semua data dan dapatkan basis data baru), Anda dapat melakukan:

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

dan kemudian Anda harus ke rake db:setupdan rake db:migratedari aplikasi Rails Anda untuk mendapatkan pengaturan lagi.


3
Jika hal di atas masih tidak berhasil (yang merupakan kasus bagi saya), coba berikan nama direktori data baru ke initdb, misalnya / usr / local / var / postgres95.
mpelzsherman

btw, segera setelah ini, Anda mungkin perlu menjalankan createuser -s your_rails_appuntuk membuat postgres rel pengguna. Lihat stackoverflow.com/questions/11919391/...
Meekohi

38

Coba ini: https://gist.github.com/joho/3735740

Ini bekerja dengan baik untuk saya. Pada akhirnya itu juga menghasilkan Anda 2 skrip bash untuk memeriksa DB Anda dan menghapus cluster lama. Sangat Luar Biasa.

lihat: http://www.postgresql.org/docs/9.2/static/pgupgrade.html untuk memahami lebih lanjut.


2
Bekerja dengan baik untuk saya dengan migrasi dari 9,4 ke 9,5.
tftdias

Juga berfungsi untuk saya dengan migrasi dari 9.3.4 ke 9.5.2.
Steve Jorgensen

1
Berikut adalah langkah-langkah untuk memperbarui 9.5.5 ke 9.6.1 menggunakan Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis

Itu pastilah jawaban terbaik !! Dan tidak ada kehilangan data.
FlorianB

9

Ditemukan di internet, solusi ini berfungsi dengan baik untuk saya.

Ketika saya mencoba memulai server postgresql setelah memutakhirkan ke OS X 10.10 Yosemite, saya mengalami masalah berikutnya:

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"?

Oke, mari kita lihat log server:

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.

Jadi, kita perlu mengikuti beberapa langkah setelah memutakhirkan 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

Itu dia.


1
Saya telah menggunakan langkah-langkah di atas untuk meningkatkan dari 9,53 ke 10,0. Perintah pg_upgrade telah sedikit ditingkatkan. Perintah baru adalah 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

solusi yang lebih baik di bawah ini
Gady

8

Jika Anda ingin menyimpan postgres versi sebelumnya, gunakan 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

Jika tidak, pertimbangkan perintah minuman ini untuk bermigrasi data yang ada: brew postgresql-upgrade-database. Lihat kode sumbernya .


1

Itu terjadi pada saya ketika saya mencoba untuk memulai Postgres12 dengan volume yang dipasang postgres11. Hanya menghapus volume yang dipasang untuk postgres11 dan restart bekerja untuk saya.

Sebelumnya saya menggunakan:

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

Saya menghapus / Pengguna / juara / postgres dan memulai kembali postgres 12, menggunakan

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.