Назад | Перейти на главную страницу

Остановить контейнер postgresql

У меня вопрос об остановке контейнера базы данных.

sudo docker run --name db -d asg1612 / postgresql

/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file = / etc / postgresql / 9.3 / main / postgresql.conf

sudo docker stop db

Будет ли база данных остановлена ​​корректно?

Будут ли у меня повреждены данные?

Независимо от того, останавливается ли база данных «изящно» или нет, вы не получите поврежденных данных. PostgreSQL безопасен от сбоев, если вы не сконфигурируете его иначе, пока базовая файловая система и дисковое хранилище соблюдают запросы на очистку диска (fsync). Вы теряете незавершенные транзакции, но ничего не повреждено и не осталось незавершенным. Это правда, даже если вы SIGKILL (kill -9) сервер, хотя это не значит, что делать это регулярно.

Основная проблема, с которой вы столкнетесь, заключается в том, что если сервер PostgreSQL внезапно выключается, в следующий раз может потребоваться больше времени для запуска, потому что ему нужно проделать больше работы для восстановления работы, которая зафиксирована, но еще не полностью выполнена. (чрезмерное упрощение).

Если нет init запускается в контейнере (sysvinit / systemd / upstart), то, скорее всего, корректное завершение работы не выполняется, если вы явно не указали докеру какой-либо сценарий отключения. (С докером еще не работал). Некоторые быстрые поиски предполагают, что он просто отправляет SIGTERM к процессу (ам) в контейнере. Это нормально для PostgreSQL и на самом деле то, что pg_ctl -m smart делает. Остановка может занять некоторое время, поэтому вы можете использовать SIGINT для принудительного прерывания транзакции и более быстрого завершения работы.