picardo Asked: 2015-01-16 15:07:48 +0800 CST2015-01-16 15:07:48 +0800 CST 2015-01-16 15:07:48 +0800 CST 预先存在的共享内存块(密钥 5432001,ID 32768)仍在使用中 772 我最近一直看到这个错误导致服务器突然崩溃。我在其他地方看到解决方案是删除 postmaster.pid 和 postmaster.opts 文件并重新启动服务器,但没有人解释为什么会发生此事件,以及如何阻止它再次发生。 postgresql 1 个回答 Voted Best Answer Craig Ringer 2015-01-18T20:59:16+08:002015-01-18T20:59:16+08:00 如果您强制终止 PostgreSQL,那么必须终止所有进程,这一点至关重要。如果您不全部终止它们,则共享内存块可能仍被保留,并且数据库文件可能仍处于打开状态并被写入。在这种情况下,再次启动 PostgreSQL 可能会导致大量数据库损坏,这就是 PostgreSQL 试图阻止您这样做的原因。覆盖这些安全措施可能会导致数据丢失。 postgres pg_ctl作为容器关闭过程的一部分,您最好完全停止 PostgreSQL 。 无论如何,停止容器终止所有 postgres进程是非常重要的。 您不应该 delete postmaster.pid,它通过允许 PostgreSQL 注意到共享内存段仍在使用中来保护您免受数据损坏。除非 Docker 以某种方式阻碍了这个过程。
如果您强制终止 PostgreSQL,那么必须终止所有进程,这一点至关重要。如果您不全部终止它们,则共享内存块可能仍被保留,并且数据库文件可能仍处于打开状态并被写入。在这种情况下,再次启动 PostgreSQL 可能会导致大量数据库损坏,这就是 PostgreSQL 试图阻止您这样做的原因。覆盖这些安全措施可能会导致数据丢失。
postgres
pg_ctl
作为容器关闭过程的一部分,您最好完全停止 PostgreSQL 。无论如何,停止容器终止所有
postgres
进程是非常重要的。您不应该 delete
postmaster.pid
,它通过允许 PostgreSQL 注意到共享内存段仍在使用中来保护您免受数据损坏。除非 Docker 以某种方式阻碍了这个过程。