Postgres 8.4停止工作

运行Postgres 8.4.x服务器的Windows 7计算机今天上午停止正常工作。 错误比奇怪更多:

  • 根据服务控制面板,服务没有运行。
  • 令人吃惊的是,服务器实际上正在运行,因为我们可以同时连接pgAdmin和我们自己的基于ODBC的软件,但是有些查询会崩溃(这就是我们发现它被破坏的原因)。
  • 既不开始不停止服务器也不做任何事情,并且都返回错误,或者无法访问数据目录,或者根本没有任何有用的错误(net helpmsg完全不提供任何内容)。

事件查看器,其中大部分是多次,并在启动或试图启动/停止服务器时发生。

PostgreSQL - Error - Se agotó el tiempo de espera al inicio del servidor 2013-12-03 21:33:32 GMT FATAL: el archivo de bloqueo «postmaster.pid» ya existe 2013-12-03 21:33:32 GMT HINT: ¿Hay otro postmaster (PID 2952) corriendo en el directorio de datos «C:/Program Files (x86)/PostgreSQL/8.4/data»? pg_ctl: no se pudo encontrar el ejecutable postgres 2013-12-03 18:46:34 CET FATAL: no se pudo crear ningún socket TCP/IP 

pg_dump是能够拉一个完整的备份(所以我做了之前搞乱),尽pipe服务仍然没有标记为正在运行。

我尝试删除pid文件,因为这是我在任何地方推荐的东西,但是这并没有帮助。

查看日志文件实际上在查询中发现一个真正的错误,但是这仍然不能解决我无法停止或启动postgres服务的问题。 编辑:并修复无效的查询不解决任何问题,应用程序仍然崩溃。

pg_hba.conf的相关部分:

 host all all 127.0.0.1/32 md5 host all all 192.168.0.0/16 md5 host all all fe80::/48 md5 

一些日志(其他人有相同的内容):
http://pastebin.com/v9gtiDmJ
http://pastebin.com/wxYr8TUM

首先为了爱你的数据, 停止对系统进行更改。
在开始进行更改之前,您需要全面分析问题,否则会导致更糟的问题。


正如你猜测Postgres正在你的系统上运行 – 我们知道这是因为pg_dump作品。 如果没有Postgres服务器, pg_dump就没有任何可交谈的地方。
这意味着你的问题(就像它在开始的时候一样)是完全整洁的 (所以服务pipe理器认为它已经closures – 谁在乎?!它已经到了,这就是重要的)。
在这种情况下,“简单的解决办法”就是忽略这种情况 – 如果没有损坏,不要破坏!

下一个简单的解决方法(如果服务经理的意见重要)是使用pg_ctl手动停止Postgres,然后使用服务pipe理器重新启动它。
这不是你的select,因为你删除了PID文件。 现在pg_ctl不知道哪个Postgres进程发信号。 (在Unix上,这是微不足道的补救措施 – 只需用最低的PID来发信号给Postgres进程终止,数据库就会closures,我不确定在Windows上有什么等价物,但是如果你这样做的话就可以做到。

最后一个选项是重新启动。 如果上述两个选项无法使Service Manager报告的状态符合实际情况,那么这是您要做的。
在Unix上,当所有的系统进程都收到TERM信号时,它应该正常closuresPostgres,而且我认为Windows有相同的行为(但是即使这样做不行 – Postgres会把它当作崩溃,并在下一次启动时恢复)。


由于您升级了Postgres安装,现在必须执行第二个或第三个选项 – 不能让系统保持当前状态。
您目前处于磁盘上的二进制文件/库与正在运行的二进制文件不匹配的状态,这不是一个好的位置。要确保您的系统处于已知的一致状态,您必须重新启动Postgres。

在你的情况下,我会build议停止数据库服务器,重新安装二进制文件(以确保没有被错过,因为他们被locking),然后再次启动。 你一般不会在Postgres运行的时候升级二进制文件,而是先closures它。 至less在Unix系统上,大部分时间你都可以“摆脱困境”,但是为什么要冒一些错误呢?