2010-07-14

Как остановить postgres грубее чем обычно

Бывает так, что команда "/etc/init.d/postgresql stop" не дает желаемого эффекта...

Происходит это потому, что чаще всего в таком случае происходит примерно следующее:

su - postgres -c /opt/pgsql-8.2/bin/pg_ctl stop -D '/opt/pgsql-8.2/data' -s -m fast

Что это значит описано в хелпнике к pg_ctl:

Режимы остановки:
smart закончить работу после отключения всех клиентов
fast закончить быстро,но с полноценной остановкой
immediate выйти немедленно без полноценной остановки; приведёт к
восстановлению при перезапуске

То есть по умолчанию база тушится в режиме fast, что при работающих транзакциях, да с блокировками, которые нельзя корректно откатить не дает никакого эффекта.
В таком случае можно поступить так:

/opt/pgsql-8.2/bin/pg_ctl stop -D /opt/pgsql-8.2/data -s -m immediate

Тут эффект 100%, но стрёмно. но если выбора нет, то и так хорошо :)

Комментариев нет: