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