Kda*_*sky 1 postgresql windows
今天早上,一台运行 Postgres 8.4.x 服务器的 Windows 7 机器停止正常工作。错误非常奇怪:
事件查看器,其中大部分都存在多次,并且在启动或尝试启动/停止服务器时发生。
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 系统上,您大部分时间都可以“侥幸逃脱”,但为什么要冒险出问题呢?
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |