Postgres - FATAL: veritabanı dosyaları sunucuyla uyumlu değil


185

MacBook Pro'mu yeniden başlattıktan sonra veritabanı sunucusunu başlatamıyorum:

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

Günlükleri kontrol ettim ve aşağıdaki satır tekrar tekrar görünüyor:

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, Mac'te önceden yüklenmiş olarak gelen sürümdü, 9.2 [.4] Homebrew aracılığıyla yüklediğim sürümdü. Belirtildiği gibi, bu yeniden başlatmadan önce çalışırdı, bu yüzden gerçekten bir derleme sorunu olamaz. Ben de yeniden koştu initdb /usr/local/var/postgres -E utf8ve dosya hala var.

Ne yazık ki, Postgres için oldukça yeniyim, bu yüzden herhangi bir yardım çok takdir edilecektir.


1
Postgres'e nasıl başlıyorsunuz? Başlangıç ​​metninizin yeni sürüme işaret ettiğinden emin misiniz? Çünkü hata mesajlarına dayanarak her iki versiyonun da yan yana kurulduğunu düşünüyorum.
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- ve yanıtserver starting
klaffenboeck

1
Adlı dosyayı aradığınızda pg_ctl 2 kopya bulacağınızdan eminim. Ve eşleşen biri which pg_ctleski sürüm, diğeri yeni sürüm olacak.
fvu

çalışan pg_ctl --versionverirpg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll Sure yaptı. Sanırım şimdi içeride paketlemek için taşındılar Server.appve varsayılan olmayan bir bağlantı noktası ve unix soket dizini kullanmak için gizlediler. En sonunda!
Craig Ringer

Yanıtlar:


364

Son zamanlarda 10.x'ten 11 veya 12'ye yükselttiyseniz postgres veri dizininizi tüm verileri koruyarak yükseltmek için aşağıdaki komutu çalıştırabilirsiniz:

brew postgresql-upgrade-database

Yukarıdaki komut, brew info postgres


2
Bu bir cazibe gibi çalıştı, ancak çalıştıktan sonra ikinci bir hata getirdi, initdb tarafından oluşturulan db'yi yükseltmeyi ve brew postgresql-upgrade-databasesonra postgres'i yeniden başlatmayı unutmayın
Shemogumbe

9.5 ila 11 üzerinde de çalıştı. Nasıl kullanılacağını göstermek için şeref brew info.
yacc

2
10'dan 11.5'e. Sen bir hayat kurtarıcısın. <3
Thomas

4
11 ila 12 arasında da çalışır.
stevex

1
9.5 ila 12 çalışır!
Augusto Samamé Barrientos

169

Nükleer seçeneği arıyorsanız (tüm verileri silin ve yeni bir veritabanı alın) şunları yapabilirsiniz:

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

ve sonra gerekir rake db:setupve rake db:migratekurulumu yeniden almak için Raylar uygulamasından.


3
Yukarıdakiler hala çalışmıyorsa (benim için durum buydu), initdb'ye yeni bir veri dizini adı vermeyi deneyin, örneğin / usr / local / var / postgres95.
mpelzsherman

btw, bundan hemen sonra createuser -s your_rails_app, rayların postgres kullanıcısını oluşturmak için muhtemelen çalıştırmanız gerekecektir . Bkz. Stackoverflow.com/questions/11919391/…
Meekohi

38

Bunu deneyin: https://gist.github.com/joho/3735740

Benim için mükemmel çalıştı. Sonunda ayrıca DB'nizi kontrol etmek ve eski kümeyi kaldırmak için 2 bash komut dosyası oluşturur. Gerçekten harika.

daha fazla bilgi edinmek için bkz . http://www.postgresql.org/docs/9.2/static/pgupgrade.html .


2
9.4'ten 9.5'e geçişle benim için mükemmel çalıştı.
tftdias

Ayrıca 9.3.4'ten 9.5.2'ye göçle benim için çalıştı.
Steve Jorgensen

1
İşte Homebrew (macOS) kullanarak 9.5.5'den 9.6.1'e
Giannis

Bu kesinlikle en iyi cevap olmalı !! Ve veri kaybı yok.
FlorianB

9

İnternette bulunan bu çözüm benim için iyi çalışıyor.

OS X 10.10 Yosemite'a yükselttikten sonra postgresql sunucusunu başlatmaya çalıştığımda, bir sonraki sorunla karşılaştım:

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

Tamam, sunucu günlüklerine bakalım:

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.

Bu nedenle, postgresql'yi yükselttikten sonra birkaç adım izlememiz gerekiyor:

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

Bu kadar.


1
9.53'ten 10.0'a yükseltmek için yukarıdaki adımları kullandım. Pg_upgrade komutu biraz yükseltildi. Yeni komut 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

aşağıda daha iyi çözüm
Gady

8

Postgres'in önceki sürümünü saklamak istiyorsanız, şunu kullanın 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

Aksi takdirde, mevcut verileri taşımak için bu demlemek komutu düşünün: brew postgresql-upgrade-database. Kaynak kodunu kontrol edin .


1

Postgres12'yi postgres11 bağlı birim ile başlatmaya çalıştığımda benim için oldu. Postgres11 için monte edilen birimi silmek ve yeniden başlatmak benim için çalıştı.

Daha önce kullanıyordum:

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

/ Users / champ / postgres'i sildim ve 12 numaralı postgres'i kullanarak yeniden başlattım.

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.