Базы данных 7 мин чтения

PostgreSQL не запускается: исправление ошибок в Ubuntu/Debian

Подробное руководство по устранению проблем с запуском PostgreSQL в Ubuntu/Debian: проверка службы, журналов, прав доступа, конфигурации и восстановление кластеров.

PostgreSQLLinuxUbuntuбаза данныхсервер

Симптомы

  • Команда psql выдаёт ошибку could not connect to server
  • Служба PostgreSQL не запускается или запускается и сразу останавливается
  • Ошибка FATAL: could not open file при запуске
  • Кластер PostgreSQL в статусе down или manual
  • Ошибка No such file or directory при подключении

Возможные причины

  • Служба PostgreSQL не запущена или остановлена
  • Повреждённые файлы данных кластера
  • Неправильные права доступа к директориям
  • Конфликт версий PostgreSQL
  • Недостаточно места на диске
  • Ошибки в конфигурационных файлах

Пошаговое решение

1

Проверьте статус службы PostgreSQL

Выполните команду systemctl status postgresql для проверки статуса. Если служба active (exited), это означает, что PostgreSQL запустил пустышку, а реальный кластер не стартовал. Проверьте список кластеров: pg_lsclusters. Если кластер в статусе down или manual, запустите его вручную: sudo systemctl start postgresql@14-main. Если служба не запускается, проверьте журнал: journalctl -u postgresql -xe.

Команда
systemctl status postgresql
2

Проверьте журналы ошибок

Журнал 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.

3

Проверьте права доступа к директориям

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
4

Пересоздайте кластер 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
5

Проверьте конфигурацию PostgreSQL

Откройте главный конфигурационный файл: sudo nano /etc/postgresql/14/main/postgresql.conf. Проверьте параметр listen_addresses - он должен быть установлен в all для прослушивания всех интерфейсов или localhost для локальных подключений. Проверьте порт (по умолчанию 5432). Также проверьте pg_hba.conf - файл управления доступом.

6

Включите автоматический запуск

Если 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. Начинайте с простых проверок и переходите к более сложным только при необходимости.

Источники

  1. askubuntu.com — проверено 02.06.2026
  2. dba.stackexchange.com — проверено 02.06.2026
  3. stackoverflow.com — проверено 02.06.2026
  4. serverfault.com — проверено 02.06.2026