Подтвердить что ты не робот

Как исправить postgres после обновления/обновления brew

Я обновился до mavericks и имел некоторые проблемы при установке/компиляции новых драгоценных камней, поэтому я переустановил xcode и обновил и обновил brew. Драгоценные камни работают сейчас, и даже postgres продолжали работать некоторое время до недавней перезагрузки. Теперь у postgres возникают проблемы.

postgres:

postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.


brew info postgres:

postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.2.4 (2842 files, 39M)
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
  Poured from bottle

postgres -D /usr/local/var/postgres:

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.2.

Что мне теперь делать, чтобы снова работать с моей базой данных?

4b9b3361

Ответ 1

$ brew tap homebrew/versions
$ brew install postgresql92
$ brew switch postgresql 9.2.8 # might need to check this one, could be newer by the time you read this
$ pg_dumpall > ninedottwo-dump
$ brew uninstall postgresql92
$ brew switch postgresql 9.3.4 # again, check version
$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
$ createdb # i got an error about my database not existing, so i had to run this
$ psql < ninedottwo-dump
$ bundle exec rails s

Спасибо Питеру за то, что он начал меня в правильном направлении.

edit: это научит меня обновлять все сразу...

Ответ 2

Вам нужно как можно скорее получить копию PostgreSQL 9.2, чтобы иметь доступ к существующему каталогу данных.

Опции для установки 9.2 через Homebrew включают:

  • Получите проверку Homebrew до того, как формула postgresql была обновлена ​​до 9.3.
  • Установите postgresql92 из homebrew/versions.
  • Установите postgresql-9.2 из petere/postgresql нажмите (раскрытие: мой проект).
  • Установить из источника.

Затем вы должны обновить его до 9.3, используя либо pg_dump, либо pg_upgrade.

pg_upgrade подходит именно для этой цели, и использование этого просто. Просто убедитесь, что вы указываете правильные пути для старых данных и двоичных файлов (-d и -b) и правильные пути к новым данным и двоичным файлам (-D и -B):

pg_upgrade \
-d /usr/local/var/postgres/9.2/ -D /usr/local/var/postgres/9.3/ \
-b /usr/local/Cellar/postgresql/9.2.4/bin/ -B /usr/local/Cellar/postgresql/9.3.2/bin/

Если все будет хорошо, вы можете очистить старые версии с помощью brew cleanup postgresql, и поскольку новая версия PostgreSQL означает новые версии родных библиотек, которые используются камнем Ruby pg, вы можете захотеть перекомпилировать ее:

gem uninstall pg
ARCHFLAGS="-arch x86_64" gem install pg

Ответ 3

В случае с 9.2 до 9.5, на El Capitan, я столкнулся с несколькими проблемами, которые могут помочь другим.

Кажется, теперь имя пакета, используемого в инструкции switch, изменилось, чтобы включить номер версии (postgresql92 vs postgresql). Итак, мне нужно было добавить дополнительный шаг для отмены текущей версии postgres:

brew unlink postgresql
brew link postgresql92
brew switch postgresql92 9.2.13 # match version

Чтобы выполнить дамп, мне нужно было запустить сервер postgres,

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

Но потом я столкнулся с ужасным:

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

Я проверяю журналы и нашел это:

could not open directory "pg_tblspc": No such file or directory

В соответствии с этим ответом Donovan, Yosemite и El Capitan удаляют некоторые необходимые каталоги. Поэтому мне также нужно было добавить эти каталоги в эту удивительную команду Nate

mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/

Таким образом, полная обновленная версия:

brew tap homebrew/versions
brew install postgresql92
brew unlink postgresql
brew switch postgresql92 9.2.13 # might need to check this one, could be newer by the time you read this
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
pg_dumpall > ninedottwo-dump
pg_ctl -D /usr/local/var/postgres stop
brew unlink postgresql92
brew uninstall postgresql92
brew switch postgresql 9.5.2 # again, check version
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
createdb # i got an error about my database not existing, so i had to run this
psql < ninedottwo-dump
bundle install # need to make sure you have pg gem for 9.5
bundle exec rails s

Все кредиты отправляются дозорным, Nate и Donovan. Большое спасибо!