Глава 12. Поиск неисправностей

Оглавление
Отказ запуска postmaster
Проблемы подключения клиента
Сообщения отладки

Отказ запуска postmaster

Есть несколько общих причин по которым postmaster отказывается стартовать. Проверь log файл postmaster или запусти его вручную (без перенаправления стандартного вывода или стандартного потока ошибок), чтобы увидеть какие сообщения выдаются. Некоторые возможные сообщения об ошибках говорят сами за себя, а вот которые нет:

FATAL: StreamServerPort: bind() failed: Address already in use
        Is another postmaster already running on that port?
    
Это, обычно, означает что только можно предположить: ты случайно запускаешь второго 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-типа разделяемой памяти, которое всегда настраивается в ядре.) В качестве временной рабочей области, ты можешь запустить postmaster с меньшим чем нормальным числом буферов (-B переключатель). Однако, в конце концов, ты захочешь переконфигурировать ядро, увеличив разрешённый размер разделяемой памяти. Ты можешь увидеть это сообщение, когда попытаешься запустить несколько postmasterов на одной машине, если её общее пространство запросов превысит предел ядра.

IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600
    
Сообщение, подобное этому, не означают, что ты забил дисковое пространство; оно означает, что предел ядра на число SysV семафоров, меньше чем число, которое хочет создать Postgres. Как указывалось выше, обойти эту проблему, запустив postmaster с уменьшенным числом процессов сервера (-N переключатель), но в конце концов, ты захочешь увеличить предел ядра.