Postgres - FATAL: tệp cơ sở dữ liệu không tương thích với máy chủ


185

Sau khi khởi động lại MacBook Pro, tôi không thể khởi động máy chủ cơ sở dữ liệu:

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

Tôi đã kiểm tra các bản ghi và dòng sau xuất hiện lặp đi lặp lại:

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 là phiên bản được cài đặt sẵn trên mac, 9.2 [.4] là phiên bản tôi đã cài đặt qua Homebrew. Như đã đề cập, điều này được sử dụng để làm việc trước khi khởi động lại, vì vậy nó thực sự không phải là một vấn đề biên dịch. Tôi cũng chạy lạiinitdb /usr/local/var/postgres -E utf8 và tập tin vẫn tồn tại.

Thật không may, tôi khá mới với Postgres, vì vậy bất kỳ trợ giúp sẽ được đánh giá rất cao.


1
Làm thế nào để bạn bắt đầu postgres? Bạn có chắc chắn điểm bắt đầu của bạn trỏ đến phiên bản mới? Bởi vì dựa trên các thông báo lỗi, tôi nghĩ cả hai phiên bản đều được cài đặt cạnh nhau.
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- và câu trả lời làserver starting
klaffenboeck

1
Khi bạn tìm kiếm các tệp có tên pg_ctl tôi chắc chắn bạn sẽ tìm thấy 2 bản sao. Và which pg_ctlphiên bản phù hợp sẽ là phiên bản cũ, và phiên bản còn lại sẽ là phiên bản mới.
fvu

chạy pg_ctl --versionchopg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll Chắc chắn đã làm rồi. Tôi nghĩ bây giờ họ đã chuyển nó để gói nó bên trong Server.appvà ẩn nó để sử dụng một thư mục ổ cắm không mặc định và cổng không trộn. Cuối cùng!
Craig Ringer

Câu trả lời:


362

Nếu gần đây bạn đã nâng cấp lên 11 hoặc 12 từ 10.x, bạn có thể chạy lệnh bên dưới để nâng cấp thư mục dữ liệu postgres của bạn giữ lại tất cả dữ liệu:

brew postgresql-upgrade-database

Lệnh trên được lấy từ đầu ra của brew info postgres


2
Điều này hoạt động giống như một bùa mê, tuy nhiên, sau khi nó hoạt động, nó đã đưa ra lỗi thứ hai, hãy nhớ nâng cấp db được tạo bởi initdb bằng cách sử dụng brew postgresql-upgrade-databasesau đó khởi động lại postgres
Shemogumbe

Làm việc trên 9,5 đến 11 là tốt. Kudos cũng cho thấy làm thế nào để sử dụng brew info.
yacc

2
Từ 10 đến 11,5. Bạn là một người cứu rỗi cuộc sống. <3
Thomas

4
Hoạt động cho 11 đến 12 là tốt.
stevex 11/12/19

1
Hoạt động từ 9,5 đến 12 !!
Augusto Samamé Barrientos

169

Nếu bạn đang tìm kiếm tùy chọn hạt nhân (xóa tất cả dữ liệu và nhận cơ sở dữ liệu mới), bạn có thể làm:

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

và sau đó bạn sẽ cần rake db:setuprake db:migratetừ ứng dụng Rails của mình để thiết lập lại.


3
Nếu cách trên vẫn không hoạt động (đó là trường hợp của tôi), hãy thử đặt tên thư mục dữ liệu mới cho initdb, ví dụ / usr / local / var / postgres95.
mpelzsherman

btw, ngay sau đó có lẽ bạn sẽ cần phải chạy createuser -s your_rails_appđể tạo người dùng postgres của đường ray. Xem stackoverflow.com/questions/11919391/
Mạnh

38

Hãy thử điều này: https://gist.github.com/joho/3735740

Nó làm việc hoàn hảo cho tôi. Cuối cùng, nó cũng tạo cho bạn 2 tập lệnh bash để kiểm tra DB của bạn và xóa cụm cũ. Thực sự tuyệt vời.

xem: http://www.postgresql.org/docs/9.2/static/pgupTHER.html để hiểu thêm.


2
Làm việc hoàn hảo cho tôi với việc di chuyển từ 9,4 đến 9,5.
tftdias

Cũng làm việc cho tôi với việc di chuyển từ 9.3.4 đến 9.5.2.
Steve Jorgensen

1
Dưới đây là các bước để cập nhật 9.5.5 lên 9.6.1 bằng Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis

Đó chắc chắn là câu trả lời tốt nhất !! Và không mất dữ liệu.
FlorianB

9

Tìm thấy trên internet, giải pháp này hoạt động tốt cho tôi.

Khi tôi cố gắng khởi động máy chủ postgresql sau khi nâng cấp lên OS X 10.10 Yosemite, tôi gặp phải một vấn đề tiếp theo:

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

Được rồi, hãy xem nhật ký máy chủ:

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.

Vì vậy, chúng ta cần làm theo một vài bước sau khi nâng cấp 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

Đó là nó.


1
Tôi đã sử dụng các bước trên để nâng cấp từ 9.53 lên 10.0. Lệnh pg_upTHER đã nâng cấp một chút. Lệnh mới là pg_upTHER -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

giải pháp tốt hơn dưới đây
Gady

8

Nếu bạn muốn giữ phiên bản trước của postgres, hãy sử dụng 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

Nếu không, hãy xem xét lệnh brew này để di chuyển dữ liệu hiện có : brew postgresql-upgrade-database. Kiểm tra mã nguồn .


1

Nó xảy ra với tôi khi tôi đang cố gắng khởi động Postgres12 với âm lượng được gắn postgres11. Chỉ cần xóa âm lượng được gắn cho postgres11 và khởi động lại làm việc cho tôi.

Trước đây tôi đã sử dụng:

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

Tôi đã xóa / Người dùng / champ / postgres và khởi động lại postgres 12, bằng cách sử dụng

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.