SystemdDoctor
служба не работает postgresql права частое

PostgreSQL: data directory has invalid permissions

PostgreSQL отказывается стартовать, если права на каталог данных шире, чем 0700 (или 0750 в версиях 11 и новее). Это защита от чужого доступа к базе, и обходить её не нужно — нужно вернуть правильные права и владельца.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Права на каталог данных расширены

    Обычно это следствие попытки «дать доступ»: команда с правами 0755 или 0777 ломает запуск кластера.

  2. Каталог принадлежит root после восстановления из копии

    Распаковка архива под root оставляет файлы с владельцем root. Кластер работает от postgres и доступа не получает.

  3. Каталог данных на файловой системе без поддержки прав

    На сетевых и внешних файловых системах права могут не сохраняться, и требование PostgreSQL выполнить невозможно.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сообщение о правах приходит от самого сервера и попадает в его журнал.

sudo tail -30 /var/log/postgresql/postgresql-16-main.log

Права и владелец каталога данных.

sudo ls -ld /var/lib/postgresql/16/main

Состояние всех кластеров машины с версиями и портами.

pg_lsclusters

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Права на каталог данных расширены
Почему происходит
Обычно это следствие попытки «дать доступ»: команда с правами 0755 или 0777 ломает запуск кластера.
Как проверить
Посмотрите права и владельца каталога.
sudo ls -ld /var/lib/postgresql/16/main
Как исправить
Верните права 0700 и владельца postgres.
sudo chown -R postgres:postgres /var/lib/postgresql/16/main && sudo chmod 700 /var/lib/postgresql/16/main
2. Каталог принадлежит root после восстановления из копии
Почему происходит
Распаковка архива под root оставляет файлы с владельцем root. Кластер работает от postgres и доступа не получает.
Как проверить
Посмотрите владельца файлов внутри каталога.
sudo ls -la /var/lib/postgresql/16/main | head
Как исправить
Смените владельца рекурсивно и запустите кластер. Распаковывать копии лучше сразу от пользователя postgres.
sudo chown -R postgres:postgres /var/lib/postgresql/16/main
3. Каталог данных на файловой системе без поддержки прав
Почему происходит
На сетевых и внешних файловых системах права могут не сохраняться, и требование PostgreSQL выполнить невозможно.
Как проверить
Посмотрите тип файловой системы под каталогом данных.
findmnt -T /var/lib/postgresql -o TARGET,FSTYPE,OPTIONS
Как исправить
Перенесите каталог данных на локальную файловую систему. Для баз это верно и по другим причинам: сетевые хранилища плохо совместимы с гарантиями записи.

Пример вывода

Права на каталог данных расширены до 0755. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× postgresql@16-main.service - PostgreSQL Cluster 16-main
     Active: failed (Result: protocol) since Mon 2026-09-15 09:12:41 MSK; 3s ago

postgres[4210]: FATAL:  data directory "/var/lib/postgresql/16/main" has invalid permissions
postgres[4210]: DETAIL:  Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
systemd[1]: postgresql@16-main.service: Failed with result 'protocol'.

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация PostgreSQL: каталог данных документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено правами 0755 на каталоге данных PostgreSQL 16.
    собственная проверка, systemd 255
    сверено 15 сентября 2026