Postgres - FATAL: файлы базы данных несовместимы с сервером


187

После перезапуска моего MacBook Pro я не могу запустить сервер базы данных:

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

Я проверил журналы, и снова и снова появляется следующая строка:

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, 9.2 [.4] это версия, которую я установил через Homebrew. Как уже упоминалось, до перезапуска это работало, поэтому это не может быть проблемой компиляции. Я также перезапустил, initdb /usr/local/var/postgres -E utf8и файл все еще существует.

К сожалению, я довольно новичок в Postgres, поэтому любая помощь будет очень признательна.


1
Как вы начинаете postgres? Вы уверены, что ваш стартовый скрипт указывает на новую версию? Потому что, основываясь на сообщениях об ошибках, я думаю, что обе версии теперь установлены рядом.
фев

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- и ответserver starting
klaffenboeck

1
Когда вы ищете файлы с именем, pg_ctl я уверен, что вы найдете 2 копии. И тот, который соответствует, which pg_ctlбудет старой версией, и другой будет новой версией.
ФВУ

Бег pg_ctl --versionдаетpg_ctl (PostgreSQL) 9.2.4
Klaffenboeck

2
@EvanCarroll Конечно, тогда. Я думаю, что теперь они переместили это, чтобы связать это внутри Server.appи скрыли это, чтобы использовать нестандартный порт и каталог сокета unix. В заключение!
Крейг Рингер

Ответы:


367

Если вы недавно обновили до 11. или 12 с 10.x, вы можете запустить следующую команду, чтобы обновить каталог данных postgres, сохранив все данные:

brew postgresql-upgrade-database

Приведенная выше команда берется из вывода brew info postgres


2
Это работало как чудо, однако после того, как оно заработало, появилось второе сообщение об ошибке, не забудьте обновить базу данных, созданную initdb, используя brew postgresql-upgrade-databaseзатем перезапустить postgres
Shemogumbe

Работали также с 9,5 до 11. Слава за то, что также показывает, как использовать brew info.
YACC

2
С 10 до 11,5. Вы спасатель жизни. <3
Томас,

4
Работает также с 11 до 12.
stevex

1
Работает с 9,5 до 12 !!
Аугусто Самаме Барриентос

169

Если вы ищете ядерный вариант (удалите все данные и получите новую базу данных), вы можете сделать:

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

и затем вам нужно будет rake db:setupи rake db:migrateиз вашего приложения Rails, чтобы снова начать настройку.


3
Если вышеупомянутое все еще не работает (что имело место для меня), попробуйте дать новое имя каталога данных для initdb, например / usr / local / var / postgres95.
mpelzsherman

Кстати, сразу после этого вам, вероятно, нужно будет запустить, createuser -s your_rails_appчтобы создать пользователя postgres для rails. См stackoverflow.com/questions/11919391/...
Meekohi

38

Попробуй это : https://gist.github.com/joho/3735740

Это отлично сработало для меня. В конце он также генерирует 2 сценария bash для проверки вашей БД и удаления старого кластера. Действительно удивительным.

см .: http://www.postgresql.org/docs/9.2/static/pgupgrade.html, чтобы понять больше.


2
Отлично сработало у меня с миграцией с 9.4 до 9.5.
tftdias

У меня тоже работало с миграцией с 9.3.4 на 9.5.2.
Стив Йоргенсен

1
Вот шаги для обновления 9.5.5 до 9.6.1 с помощью Homebrew (MacOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Яннис

Это определенно должен быть лучший ответ! И без потери данных.
FlorianB

9

Нашел в интернете, это решение отлично работает для меня.

Когда я попытался запустить сервер postgresql после обновления до OS X 10.10 Yosemite, я столкнулся со следующей проблемой:

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

Хорошо, давайте посмотрим на логи сервера:

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.

Итак, нам нужно выполнить несколько шагов после обновления 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

Вот и все.


1
Я использовал описанные выше шаги для обновления с 9.53 до 10.0. Команда pg_upgrade немного обновилась. Новая команда: 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

лучшее решение ниже
Гады

8

Если вы хотите сохранить предыдущую версию postgres, используйте 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

В противном случае, считают эту варочную команду перенести существующие данные: brew postgresql-upgrade-database. Проверьте исходный код .


1

Это случилось со мной, когда я пытался запустить Postgres12 с подключенным томом postgres11. Просто удаление подключенного тома для postgres11 и перезагрузка работали для меня.

Ранее я использовал:

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

Я удалил / Users / champ / postgres и перезапустил postgres 12, используя

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.