postgresql查询没有终止,重启后服务postgresql没有启动

时间:2016-01-28 16:05:02

标签: postgresql

在我的工作中,我正在运行一个复杂的查询。我取消了它,昨天回家了。今天早上在后面查询是不可能终止的,也有“终止后端”功能。我的一位同事重新启动了安装了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冒险之旅,我会非常满意。这就是为什么我不会说这个问题得到解答,因为我不知道出了什么问题,也许有一天会再遇到这个问题。

2 个答案:

答案 0 :(得分:3)

解释非常简单。 PostgreSQL将进程ID写入名为postmaster.pid的文件中 - 该文件的存在应该表明服务器正在运行。当PostgreSQL干净地关闭时,它会删除postmaster.pid文件。

但是,当您的同事重新启动主机时,PostgreSQL服务器在没有机会删除postmaster.pid文件的情况下被杀死。因此,当您尝试启动PostgreSQL时,该文件的存在使其看起来抱怨服务器已在运行。

This answer提供更完整的建议。一般情况下,您永远不应该删除postmaster.pid,因为它应该有助于防止两台服务器同时在同一数据文件上运行。但是,如果您确定postmaster.pid文件指示的进程已死,则无论如何只需手动删除过时的PID文件。

答案 1 :(得分:-2)

在Windows中删除所有正在运行的postgres进程并启动服务