在我的工作中,我正在运行一个复杂的查询。我取消了它,昨天回家了。今天早上在后面查询是不可能终止的,也有“终止后端”功能。我的一位同事重新启动了安装了postgres的主机。机器重启后,postgres数据库服务器无法启动。
在我的日志文件中,我看到错误:
'pg_ctl:此数据目录似乎正在运行预先存在的postmaster'
我不知道如何处理这个问题。我可以尝试修复它或尝试从保存文件中推断数据。什么是最合乎逻辑的步骤,你知道如何解决这个问题吗?
之前它给出了此错误消息:
2016-01-28 15:52:33 GMT致命:锁定文件“postmaster.pid”已存在
2016-01-28 15:52:33 GMT提示:是否有另一位邮政局长(PID 2100)在数据目录“C:/PostgreSQL/9.1/data”中运行?
更新...我找到文件postmaster.pid并将其删除。现在我正在重新启动计算机并希望它能够启动。
更新......现在有效。我重新启动计算机并立即启动postgres。由于以下论坛,我小时候很开心,但同时也不满意:https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists。这里声明永远不要删除postmaster.pid,因为可能存在数据损坏。因此,我将备份我在postgres中拥有的所有数据库。
所以,如果有人能够分享我今天的ICT冒险之旅,我会非常满意。这就是为什么我不会说这个问题得到解答,因为我不知道出了什么问题,也许有一天会再遇到这个问题。
答案 0 :(得分:3)
解释非常简单。 PostgreSQL将进程ID写入名为postmaster.pid
的文件中 - 该文件的存在应该表明服务器正在运行。当PostgreSQL干净地关闭时,它会删除postmaster.pid
文件。
但是,当您的同事重新启动主机时,PostgreSQL服务器在没有机会删除postmaster.pid
文件的情况下被杀死。因此,当您尝试启动PostgreSQL时,该文件的存在使其看起来抱怨服务器已在运行。
This answer提供更完整的建议。一般情况下,您永远不应该删除postmaster.pid
,因为它应该有助于防止两台服务器同时在同一数据文件上运行。但是,如果您确定postmaster.pid
文件指示的进程已已死,则无论如何只需手动删除过时的PID文件。
答案 1 :(得分:-2)
在Windows中删除所有正在运行的postgres进程并启动服务