历史版本。 PostgreSQL 6.5 已结束支持。 请参阅 当前版本手册.
第 26 章 故障排除
26.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 来绕过这个问题,但最终你还是应该增大内核限制。