Postgres 8.4 停止工作

Kda*_*sky 1 postgresql windows

今天早上,一台运行 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
Run Code Online (Sandbox Code Playgroud)

pg_dump 能够提取完整的备份(所以我在搞乱之前就这样做了),尽管该服务仍未标记为正在运行。

我试过删除 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
Run Code Online (Sandbox Code Playgroud)

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

vor*_*aq7 11

首先,为了您对数据的热爱,停止对系统进行更改。
在开始进行更改之前,您需要全面分析问题,否则您将面临使问题变得更糟的真正风险。


正如您猜测的那样,Postgres 正在您的系统上运行- 我们知道这一点,因为它pg_dump有效。如果没有 Postgres 服务器,pg_dump就没有任何东西可以与之交谈。
这意味着您的问题(因为它在开始时就存在)完全是表面问题(所以服务经理认为它已经坏了 - 谁在乎?!它已经坏了,这才是重要的)。
在这种情况下,“简单修复”就是忽略这种情况——如果它没有坏,就不要坏!

下一个简单的解决方法(如果服务管理器的意见对您很重要)是使用 手动停止 Postgres pg_ctl,然后使用服务管理器重新启动它。
这不再适合您,因为您删除了 PID 文件。现在pg_ctl不知道要向哪个 Postgres 进程发出信号。(在 Unix 上,这是微不足道的补救措施 - 只需用最低的 PID 通知 Postgres 进程终止并关闭数据库。我不确定 Windows 上的等价物是什么,但如果你这样做,你可以做到。)

最后一个选项是重新启动。如果上述两个选项未能使 Service Manager 报告的状态与现实相符,您将执行此操作。
在 Unix 上,当所有系统进程都收到TERM信号时,这应该优雅地关闭 Postgres ,我假设 Windows 具有相同的行为(但即使不是这样也没关系 - Postgres 会将其视为崩溃并在下次启动时恢复) .


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

在你的情况下,我建议停止数据库服务器,重新安装二进制文件(以确保没有因为它们被锁定而丢失),然后重新启动它。您通常不会在 Postgres 运行时升级二进制文件 - 您首先将其关闭。至少在 Unix 系统上,您大部分时间都可以“侥幸逃脱”,但为什么要冒险出问题呢?