Не удается закрыть старый postmaster при обновлении до Postgres 9.2

13

Я обновляюсь до Postgres 9.2.2 (с 9.1.4). Когда я пытаюсь обновить БД, используя:

pg_upgrade -b /usr/local/Cellar/postgresql/9.1.4/bin -B /usr/local/Cellar/postgresql/9.2.2/bin -d /usr/local/var/postgres91 -D /usr/local/var/postgres

Я получаю следующее сообщение об ошибке:

Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories                 ok

There seems to be a postmaster servicing the old cluster.
Please shutdown that postmaster and try again.
Failure, exiting

Я пытаюсь остановить сервер, но не могу заставить команду обновления работать. Как мне закрыть старый почтмейстер?

Лучано
источник

Ответы:

11

postmaster.pidДолжен быть внутри предыдущей версии usr/local/varпапки. Простое переименование этого файла должно решить проблему.

Лучано
источник
Я тоже сталкивался с этой проблемой пару раз, и это хороший ответ. Остановка всех экземпляров postgres перед обновлением также должна быть уместна
Джером,
4

В OS X Yosemite после установки PostgreSQL через Homebrew:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Сара Весселс
источник
1
Это не решает проблему. Если pg_ctl -D /usr/local/var/postgres/ stopвернется No such process, то вам следует rm /usr/local/var/postgres/postmaster.pid.
Андрей
1

В большинстве систем Unix вы найдете сценарий инициализации, в /etc/init.dкотором вы можете использовать для запуска, перезапуска, перезагрузки или остановки служб Unix.

например

sudo /etc/init.d/postgresql stop

Если это не доступно, вы можете использовать pg_ctl stop

например

su - postgres
bash-3.1$ pg_ctl stop  # normal stop
bash-3.1$ pg_ctl stop -m s # smart stop
bash-3.1$ pg_ctl stop -m f # fast stop
bash-3.1$ pg_ctl stop -m i # immediate stop

Больше о pg_ctl

http://www.postgresql.org/docs/9.1/static/app-pg-ctl.html

РЕДАКТИРОВАТЬ Если вы все еще получаете ошибку, и вы уверены, что почтмейстер больше не работает (проверьте с sudo ps aux | grep "postmaster"- должен возвращать только одну строку), у вас все еще есть файл pid после нечистого завершения работы

Удалить pidfile, например

> sudo -u postgres mv /var/lib/postgres/data-9.1/postmaster.pid /tmp
Мишель Фельдхайм
источник
1
Когда я пытаюсь pg_ctl stop, я получаю: pg_ctl: no database directory specified and environment variable PGDATA unset. Кстати, ни один сервер не работает luciano$ ps auxwww | grep postgresluciano 995 0.0 0.0 2434892 548 s000 R+ 10:42PM 0:00.00 grep postgres.
Лучано
grep для почтмейстера
Обновленный ответ с дополнительной информацией
Не повезло:sudo ps aux | grep "postmaster" luciano 3101 0.0 0.0 2434892 548 s002 S+ 9:12PM 0:00.00 grep postmaster
Лучано
Проблема решена. Смотри мой ответ.
Лучано
0

В Ubuntu остановите службу PostgreSQL перед выполнением обновления. Это остановит все экземпляры postgres независимо от установленных версий.

service postgresql stop

scarver2
источник