PostgreSQL не запускается: исправление ошибок в Ubuntu/Debian
Подробное руководство по устранению проблем с запуском PostgreSQL в Ubuntu/Debian: проверка службы, журналов, прав доступа, конфигурации и восстановление кластеров.
Симптомы
- Команда psql выдаёт ошибку could not connect to server
- Служба PostgreSQL не запускается или запускается и сразу останавливается
- Ошибка FATAL: could not open file при запуске
- Кластер PostgreSQL в статусе down или manual
- Ошибка No such file or directory при подключении
Возможные причины
- Служба PostgreSQL не запущена или остановлена
- Повреждённые файлы данных кластера
- Неправильные права доступа к директориям
- Конфликт версий PostgreSQL
- Недостаточно места на диске
- Ошибки в конфигурационных файлах
Пошаговое решение
Проверьте статус службы PostgreSQL
Выполните команду systemctl status postgresql для проверки статуса. Если служба active (exited), это означает, что PostgreSQL запустил пустышку, а реальный кластер не стартовал. Проверьте список кластеров: pg_lsclusters. Если кластер в статусе down или manual, запустите его вручную: sudo systemctl start postgresql@14-main. Если служба не запускается, проверьте журнал: journalctl -u postgresql -xe.
systemctl status postgresql Проверьте журналы ошибок
Журнал PostgreSQL содержит подробную информацию об ошибках. Расположение: /var/log/postgresql/postgresql-14-main.log. Откройте его: sudo nano /var/log/postgresql/postgresql-14-main.log. Ищите строки с FATAL или ERROR. Типичные ошибки: data directory has wrong ownership, could not open file, insufficient disk space. Если журнал пустой, запустите PostgreSQL вручную с отладкой: postgres -d 3 -D /var/lib/postgresql/14/main.
Проверьте права доступа к директориям
PostgreSQL требует определённые права доступа к директориям данных и логов. Выполните: sudo chmod 700 -R /var/lib/postgresql/14/main. Также проверьте, что пользователь postgres является владельцем: sudo chown -R postgres:postgres /var/lib/postgresql/14/main. Если вы изменили права на /var/log, восстановите их: sudo chown -R root:root /var/log/*.
sudo chmod 700 -R /var/lib/postgresql/14/main Пересоздайте кластер PostgreSQL
Если кластер повреждён, его можно пересоздать. Сначала удалите старый кластер: sudo pg_dropcluster 14 main. Затем создайте новый: sudo pg_createcluster 14 main --start. Запустите службу: sudo systemctl start postgresql. Если нужно сохранить данные, сделайте бэкап перед удалением: pg_dumpall > backup.sql.
sudo pg_createcluster 14 main --start Проверьте конфигурацию PostgreSQL
Откройте главный конфигурационный файл: sudo nano /etc/postgresql/14/main/postgresql.conf. Проверьте параметр listen_addresses - он должен быть установлен в all для прослушивания всех интерфейсов или localhost для локальных подключений. Проверьте порт (по умолчанию 5432). Также проверьте pg_hba.conf - файл управления доступом.
Включите автоматический запуск
Если PostgreSQL не запускается при загрузке системы, убедитесь, что служба включена: sudo systemctl enable postgresql. Если проблема в systemd-generator, выполните: sudo systemctl daemon-reload для перезапуска генератора. Проверьте файл /etc/postgresql/14/main/start.conf - слово auto должно быть в строке для автозапуска.
sudo systemctl enable postgresql Что такое PostgreSQL и почему он может не запускаться
PostgreSQL — это одна из наиболее популярных и мощных объектно-реляционных систем управления базами данных (СУБД) с открытым исходным кодом. Она используется в масштабных веб-приложениях, аналитических платформах, системах научных вычислений и корпоративных решениях. PostgreSQL отличается высокой надёжностью, расширяемостью и поддержкой сложных запросов, что делает его выбором для проектов любого масштаба.
Несмотря на свою стабильность, PostgreSQL время от времени может отказываться запускаться, особенно после обновлений системы, перезагрузки сервера или изменения конфигурации. Проблемы с запуском могут возникать как на этапе установки, так и в процессе эксплуатации, и их причины самые разные — от банальной остановки службы до повреждения файлов данных или конфликтов версий.
Типичные сценарии возникновения проблемы
Среди самых распространённых случаев, когда PostgreSQL не запускается, можно выделить следующие:
- Служба остановлена после перезагрузки сервера. Если служба не была включена в автозапуск, она не стартует автоматически.
- Кластер в статусе
downилиmanual. В Ubuntu/Debian используется утилитаpg_lsclustersдля управления кластерами, и кластер может оказаться в неактивном состоянии. - Повреждение файлов данных. Аварийное завершение работы, нехватка дискового пространства или ошибки ввода-вывода могут привести к повреждению данных.
- Неправильные права доступа. Если права на директорию данных были изменены, PostgreSQL не сможет прочитать свои файлы.
- Конфликт портов или версий. Запущенный экземпляр другой версии PostgreSQL может занимать порт 5432.
Быстрая диагностика: первые шаги
Прежде чем приступать к глубокой отладке, выполните несколько базовых команд для быстрой оценки ситуации. Проверьте статус службы PostgreSQL:
systemctl status postgresql
Если служба не активна, попробуйте запустить её вручную и посмотрите на вывод:
sudo systemctl start postgresql
Далее проверьте список кластеров и их состояние:
pg_lsclusters
Пример вывода:
Ver Cluster Port Status Owner Data directory Log file
14 main 5432 down postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
Если статус down, попробуйте запустить кластер напрямую:
sudo systemctl start postgresql@14-main
Просмотр журналов ошибок
Если служба запускается и сразу останавливается, ключ к решению проблемы находится в журналах. Откройте файл лога PostgreSQL:
sudo tail -n 50 /var/log/postgresql/postgresql-14-main.log
Или используйте journalctl для просмотра системных журналов:
journalctl -u postgresql -xe --no-pager | tail -n 40
Типичные сообщения об ошибках и их значения:
| Сообщение | Причина |
|---|---|
FATAL: could not open file "postmaster.pid" | Остаточный файл блокировки от предыдущего запуска |
FATAL: data directory has wrong ownership | Неправильный владелец директории данных |
FATAL: could not open file "pg_hba.conf" | Файл конфигурации доступа не найден |
LOG: could not bind IPv4 address "0.0.0.0" | Порт уже занят другим процессом |
Исправление прав доступа и файлов данных
Часто проблема кроется в неправильных правах доступа. Убедитесь, что пользователь postgres является владельцем директории данных и что права установлены корректно:
sudo chown -R postgres:postgres /var/lib/postgresql/14/main
sudo chmod 700 /var/lib/postgresql/14/main
Если после аварийного завершения остался файл postmaster.pid, удалите его:
sudo rm /var/lib/postgresql/14/main/postmaster.pid
После этого попробуйте снова запустить службу:
sudo systemctl start postgresql
Пересоздание кластера как крайняя мера
Если файлы данных повреждены и восстановить их не удаётся, кластер можно пересоздать. Внимание: это удалит все данные! Сначала сделайте резервную копию, если это возможно:
sudo -u postgres pg_dumpall > /tmp/backup.sql
Затем удалите и пересоздайте кластер:
sudo pg_dropcluster 14 main
sudo pg_createcluster 14 main --start
После пересоздания восстановите данные из бэкапа:
sudo -u postgres psql < /tmp/backup.sql
Проверка конфигурации и сетевых настроек
Если PostgreSQL запускается, но вы не можете подключиться к нему, проверьте конфигурационные файлы. Убедитесь, что параметр listen_addresses установлен правильно:
sudo grep "^listen_addresses" /etc/postgresql/14/main/postgresql.conf
Для локальных подключений достаточно установить listen_addresses = 'localhost'. Для доступа с удалённых хостов используйте listen_addresses = '*' и убедитесь, что файл pg_hba.conf разрешает подключения с нужных IP-адресов:
sudo grep -v "^#" /etc/postgresql/14/main/pg_hba.conf | grep -v "^$"
После изменения конфигурации перезапустите службу:
sudo systemctl restart postgresql
Включение автозапуска PostgreSQL
Чтобы PostgreSQL запускался автоматически при загрузке сервера, включите службу:
sudo systemctl enable postgresql
Проверьте, что генератор systemd корректно настроен:
sudo systemctl daemon-reload
Убедитесь, что в файле /etc/postgresql/14/main/start.conf для нужного кластера указан параметр auto:
cat /etc/postgresql/14/main/start.conf
Пример строки: 14 main auto
После включения автозапуска выполните проверочную перезагрузку и убедитесь, что PostgreSQL стартует корректно:
sudo reboot
# После перезагрузки:
systemctl status postgresql
Следуя этим шагам по порядку, вы сможете диагностировать и устранить большинство проблем с запуском PostgreSQL в Ubuntu/Debian. Начинайте с простых проверок и переходите к более сложным только при необходимости.
Источники
- askubuntu.com — проверено 02.06.2026
- dba.stackexchange.com — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026
- serverfault.com — проверено 02.06.2026