↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 32 章 故障排除

32.1. postmaster 启动失败

postmaster 启动失败有几个常见的原因。 检查 postmaster 的日志文件,或者手工启动它(不重定向 标准输出或标准错误)看看会出现什么错误消息。 其中一些可能的错误消息是不言自明的, 但也有一些不是:

FATAL: StreamServerPort: bind() failed: Address already in use
        Is another postmaster already running on that port?
    

这通常就像消息所提示的那样:你不小心在一个已经运行着 postmaster 的端口上又启动了第二个 postmaster。 但是,如果内核错误 消息不是"Address already in use"或类似措辞, 则可能是别的问题。例如,试图在一个 保留端口号上启动 postmaster 可能会得到类似

$ postmaster -i -p 666
FATAL: StreamServerPort: bind() failed: Permission denied
        Is another postmaster already running on that port?
    
IpcMemoryCreate: shmget failed (Invalid argument) key=5440001, size=83918612, permission=600
FATAL 1:  ShmemCreate: cannot create region
    

这样的消息可能意味着你的内核对共享内存区大小的限制 小于 Postgres 试图创建的缓冲区。(或者它可能 意味着你的内核根本没有配置 SysV 风格的 共享内存支持。)作为临时的 变通办法,你可以尝试用比正常情况更少的 缓冲区数目(-B 开关)启动 postmaster。不过你最终还是 应该重新配置 内核以增大允许的共享内存大小。 如果在同一台机器上启动多个 postmaster 而它们的 总空间请求超过内核限制,你也可能看到这条消息。

IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600
    

这样的消息并不意味着你的磁盘 空间用完了;它意味着你的内核对 SysV 信号量数目的限制小于 Postgres 想要创建的数目。如上所述, 你可以通过用较少的后端进程数目(-N 开关)启动 postmaster 来绕过这个问题,但最终你还是应该增大内核限制。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。