Se o banco de dados parar ou não "normalmente", você não terá dados corrompidos. O PostgreSQL é seguro contra falhas, a menos que você configure de outra forma, desde que o sistema de arquivos subjacente e o armazenamento em disco respeitem as solicitações de descarga de disco (fsync). Você perde as transações em andamento, mas nada é corrompido ou deixado pela metade. Isto é verdade mesmo se você SIGKILL
( kill -9
) o servidor, embora isso não é uma boa ideia fazer isso rotineiramente .
O principal problema que você terá é que, se o servidor PostgreSQL for encerrado abruptamente, pode levar mais tempo para ser iniciado na próxima vez, pois ele precisa fazer mais trabalho para recuperar o trabalho que está comprometido, mas ainda não totalmente aplicado. (simplificação excessiva).
Se não houver init
em execução no contêiner (sysvinit / systemd / upstart), provavelmente, nenhum desligamento normal será executado, a menos que você tenha fornecido explicitamente algum tipo de script de desligamento ao Docker. (Eu não trabalhei com o docker ainda). Algumas pesquisas rápidas sugerem que apenas envia um SIGTERM
para o (s) processo (s) no contêiner. Isso é bom para o PostgreSQL e é de fato o que pg_ctl -m smart
faz . Pode demorar um pouco para parar, portanto, você pode optar por usar SIGINT
para forçar a interrupção da transação e encerrar mais rapidamente.