Как исправить 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.
Что мне теперь делать, чтобы снова работать с моей базой данных?
Ответы
Ответ 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. Большое спасибо!