Postgresql查询没有结束,重启后postgresql服务无法启动。

4
在我的工作中,我运行了一个复杂的查询。昨天我取消了它并回家了。今天早上,在后台,即使使用“终止后端”功能,也无法终止查询。我的同事重新启动了安装有Postgres的主机。机器重启后,Postgres数据库服务器无法启动。
在我的日志文件中,我看到了错误信息:“pg_ctl:此数据目录似乎正在运行一个预先存在的postmaster”。
我不确定如何处理这个问题。我可以尝试修复它或从保存文件中推断数据。采取什么最合理的步骤并且您知道如何解决这个问题吗?
之前它给出了这个错误消息:
2016-01-28 15:52:33 GMT FATAL: 锁定文件“postmaster.pid”已经存在 2016-01-28 15:52:33 GMT HINT: 数据目录“C:/PostgreSQL/9.1/data”中是否运行另一个postmaster(PID 2100)?
更新...我找到了文件postmaster.pid并将其删除。现在我正在重新启动计算机并希望它能够启动。
更新...它现在起作用了。我重新启动了计算机,Postgres立即启动了。虽然像孩子一样开心,但由于以下论坛的原因,我并不完全满意:https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists。在这里,它指出永远不要删除postmaster.pid文件,因为可能会导致数据损坏。因此,由于这个原因,我现在将备份我在Postgres中拥有的所有数据库。
如果有人可以为我今天的ICT冒险提供更多信息,我会非常满意。这就是为什么我不会说这个问题已经得到解答,因为我不知道出了什么问题,也许有一天会再次遇到。
2个回答

3
解释很简单。PostgreSQL将进程ID写入名为postmaster.pid的文件中——该文件的存在应表示服务器正在运行。当PostgreSQL干净地关闭时,它会删除postmaster.pid文件。
但是,如果您的同事重新启动了主机,那么在没有机会删除postmaster.pid文件的情况下,PostgreSQL服务器就被终止了。因此,当您尝试启动PostgreSQL时,该文件的存在使其看起来抱怨服务器已经在运行。 这个答案提供了更完整的建议。通常情况下,您永远不应无故删除postmaster.pid,因为它应该有助于防止两个服务器同时在相同的数据文件上运行。但是,如果您确定由postmaster.pid文件指示的进程已经死亡,那么请放心地手动删除过时的PID文件。

-2
在Windows中,删除所有正在运行的Postgres进程并启动服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接