Postgres - FATAL: файлы базы данных несовместимы с сервером
После перезагрузки моего 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
Если вы работаете на Mac и недавно обновились до 10. с 10.x, вы можете запустить следующую команду, чтобы обновить каталог данных postgres, сохранив все данные:
brew postgresql-upgrade-database
Вышеуказанная команда взята из вывода brew info postgres
Ответ 2
Если вы ищете ядерную опцию (удалите все данные и получите новую базу данных), вы можете сделать:
rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8
а затем вам понадобится rake db:setup
и rake db:migrate
из вашего приложения Rails, чтобы снова установить настройки.
Ответ 3
Попробуйте следующее:
https://gist.github.com/joho/3735740
Он отлично работал у меня.
В итоге он также генерирует вам 2 скрипта bash для проверки вашей БД и удаления старого кластера.
Действительно Удивительный.
см. http://www.postgresql.org/docs/9.2/static/pgupgrade.html, чтобы понять больше.
Ответ 4
Нашел в интернете, это решение отлично работает для меня.
Когда я попытался запустить сервер 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
Вот оно.
Ответ 5
Если вы хотите сохранить предыдущую версию 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 для переноса существующих данных: brew postgresql-upgrade-database
. Проверьте исходный код.
Ответ 6
Это случилось со мной, когда я пытался запустить 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