↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.

第 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 来绕过这个问题,但最终你还是应该增大内核限制。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.