Как мне обновить базу данных postgresl? Ошибка несовместимости

26

Я установил postgresql через Homebrew.

У меня есть следующая проблема после обновления:

FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.1.2.

Любые советы о том, как обновить? Я попробовал следующее:

$ pg_upgrade -d /usr/local/var/postgres/ -D /usr/local/var/postgres -b 
/usr/local/Cellar/postgresql/9.0.4/bin -B /usr/local/Cellar/postgresql/9.1.2/bin

Это не сработало. Вот вывод.

Performing Consistency Checks
Checking current, bin, and data directories                 ok
Checking cluster versions                                   
This utility can only upgrade to PostgreSQL version 9.1.
Failure, exiting

ошибка.

Даниэль Фишер
источник

Ответы:

36

Для меня на OS X с Homebrew это было так.

  1. Установил новые postgres с Homebrew (начал получать ошибку)
  2. mv /usr/local/var/postgres /usr/local/var/postgres.old
  3. initdb -D /usr/local/var/postgres
  4. pg_upgrade -b /usr/local/Cellar/postgresql/9.0.4/bin -B /usr/local/Cellar/postgresql/9.1.2/bin -d /usr/local/var/postgres.old -D /usr/local/var/postgres
  5. ./delete_old_cluster.sh (этот скрипт создается для вас автоматически в текущем каталоге, когда вы проходите через вышеуказанные шаги)
  6. rm delete_old_cluster.sh
Макс Черняк
источник
Фантастика и просто то, что мне нужно, друг! Спасибо. Особенно после обновления Льва, идущего от Снежного Барса. Проверьте server.log Google люди!
Пьяммер
Это отлично сработало для меня, спасибо! Обратите внимание , что Postgres не должен быть запущен , прежде чем делать эти шаги, так что если вы установили его через Homebrew убедитесь выгрузить запуска агента , который делает его запустился автоматически launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist. После того, как все вышеперечисленные шаги выполнены, просто загрузите его снова:launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Маркус Амальтея Магнусон
6

Вот как я это сделал на fedora:

  • переименуйте ваш старый каталог данных в нечто вроде data.old
  • запустить postgresql-setup initdbэто создаст новый каталог данных
  • тогда беги pg_upgrade -b /usr/lib64/pgsql/postgresql-9.0/bin/ -B /usr/bin/ -d data.old/ -D data

Я думаю, что для вас это будет:

pg_upgrade -b /usr/local/Cellar/postgresql/9.0.4/bin -B /usr/bin/ -d /usr/local/var/postgres.old/ -D /usr/local/var/postgres/
  • Вы также хотите скопировать pg_hba.conf и postgresql.conf из data.old в новый каталог данных.
  • перезапустить postgresql
imel96
источник
1

Я пропустил / забыл строку "initdb"

initdb -D / usr / local / var / postgres

После того, как БД была создана, pg_upgrade работал в моей системе Windows.

user321204
источник
0

Для Arch Linux в вики есть решение, которое отлично работает для меня:

pacman -S --needed postgresql-old-upgrade
su -
su - postgres -c 'mv /var/lib/postgres/data /var/lib/postgres/data-9.2'
su - postgres -c 'mkdir /var/lib/postgres/data'
su - postgres -c 'initdb --locale en_US.UTF-8 -E UTF8 -D /var/lib/postgres/data'
su - postgres -c 'pg_upgrade -b /opt/pgsql-9.2/bin/ -B /usr/bin/ -d /var/lib/postgres/data-9.2 -D /var/lib/postgres/data'
Руди Матела
источник