#Симптом и границы применимости
PostgreSQL не стартует после изменения настроек, потому что запрошенный TCP-порт уже занят другим процессом, включая второй экземпляр PostgreSQL. Важно определить, какой именно кластер и процесс занимает порт, прежде чем перезапускать службы.
#Как отличить возможные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Другой экземпляр PostgreSQLНа сервере запущены две версии или кластера, слушающие один порт. | ss показывает postgres на 5432 | Согласовать уникальные порты |
| Другое приложениеПорт занят сторонней службой. | ss показывает другой процесс | Проверить назначение порта |
| Старый процесс не завершёнПосле перезапуска остаётся активный слушатель. | В журнале bind address already in use | Разобраться с менеджером служб |
#Пошаговая диагностика и безопасное исправление
- 1. Найдите точное сообщение о портеНа сервере откройте журнал службы PostgreSQL через штатный менеджер вашей ОС и найдите could not bind IPv4/IPv6 address либо address already in use. Не считайте эту ошибку равной отсутствию разрешения на файлы.
- 2. Посмотрите, кто слушает портНа Linux выполните ss с необходимыми правами для просмотра имени процесса. Порт 5432 — значение по умолчанию, в вашем кластере оно может быть другим.
- Терминал Linux с sudo; только просмотр слушающих TCP-сокетовLinux · Терминал (Bash)КомандаНужен sudoТерминал Linux с sudo; только просмотр слушающих TCP-сокетов. Не завершает процессы.
sudo ss -ltnp '( sport = :5432 )'
- 3. Сопоставьте с именем кластераНа Debian/Ubuntu с пакетами postgresql-common команда pg_lsclusters показывает список кластеров и их порты. На других ОС используйте конфигурацию соответствующей службы, не копируя чужую команду.Linux · Терминал (Bash)КомандаТолько Debian/Ubuntu с postgresql-common; если команды нет, пропустите шаг.
pg_lsclusters
- 4. Найдите эффективный порт в настройкахЕсли кластер временно работает на другом порте, подключитесь к нему и выполните SHOW port и SHOW config_file. Для остановленного кластера проверьте его postgresql.conf через разрешённый доступ к файлу.
- 5. Не убивайте неизвестный процессЕсли порт занят действующим кластером с рабочими приложениями, не используйте kill -9. Согласуйте, должен ли новый кластер слушать другой порт, либо требуется плановое выключение старого.
- 6. Исправьте конфигурацию конкретного кластераВ тестовой копии укажите свободный разрешённый порт и согласуйте его с приложением и сетевыми правилами. Параметр port меняется при запуске службы, поэтому простая перезагрузка конфигурации не всегда достаточна.
- 7. Проверьте запуск и подключениеПосле согласованного перезапуска нужной службы повторите ss и подключитесь клиентом на точный порт. Убедитесь, что имя базы и версия кластера ожидаемые, прежде чем переключать приложение.
- Терминал; замените адрес, порт, роль и БДLinux · Терминал (Bash)КомандаТерминал; замените адрес, порт, роль и БД. Пароль вводите безопасным способом, не в аргументе команды.
psql -h 127.0.0.1 -p 5432 -U app_user -d appdb -c "SELECT current_database(), version();"
#Как проверить, что проблема устранена
Порт прослушивается одним ожидаемым кластером; подключение приложения идёт в нужную базу, действующие сервисы не прерваны.
#Если исправление не помогло
Если ss ничего не показывает, выясните, на каком этапе завершился запуск PostgreSQL; проверьте права на каталог данных, конфигурацию и последние строки журнала.