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


185

Після перезапуску 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
Як розпочати постгреси? Ви впевнені, що ваш стартовий сценарій вказує на нову версію? Тому що, грунтуючись на повідомленнях про помилки, я думаю, що обидві версії зараз встановлені поряд.
fvu

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буде старою версією, а другий - новою версією.
fvu

біг pg_ctl --versionдаєpg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll Впевнений, що зробив тоді. Я думаю, що тепер вони перемістили його, щоб зв'язати його всередині Server.appта приховати, щоб використовувати каталог портів без портів, що не використовуються за замовчуванням, і Unix. Нарешті!
Крейг Рінгер

Відповіді:


363

Якщо ви нещодавно оновили до 11 або 12 з 10.x, ви можете виконати команду нижче, щоб оновити каталог даних postgres із збереженням усіх даних:

brew postgresql-upgrade-database

Наведена вище команда взята з виводу brew info postgres


2
Це спрацьовувало як шарм, однак, після того, як воно спрацювало, воно ввело другу помилку, не забудьте оновити db, створений initdb, використовуючи brew postgresql-upgrade-databaseпотім перезавантажити postgres
Shemogumbe

Працювали також 9,5 до 11. Kudos також показав, як користуватися brew info.
yacc

2
Від 10 до 11.5. Ви рятувальник життя. <3
Томас

4
Також працює для 11-12.
stevex

1
Працює з 9,5 до 12 !!
Augusto Samamé Barrientos

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

btw, одразу після цього вам, ймовірно, доведеться запустити, createuser -s your_rails_appщоб створити postgres користувача рейки. Дивіться stackoverflow.com/questions/11919391/…
Meekohi

38

Спробуйте це: https://gist.github.com/joho/3735740

Це прекрасно працювало для мене. Зрештою, він також генерує два сценарії 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
Giannis

Це, безумовно, повинна бути найкращою відповіддю !! І втрати даних немає.
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

Якщо ви хочете зберегти попередню версію постгресів, використовуйте 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.