PostgreSQL LinuxWindowsсервер PostgreSQL

PostgreSQL: Как проверить причину ошибки no space left on device в PostgreSQL

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

PostgreSQL пишет no space left on device, когда исчерпаны блоки файловой системы, inode или место в отдельном табличном пространстве. Опасно удалять содержимое каталога pg_wal: это может сделать весь кластер невосстановимым.

В этой статье
  1. Симптом и границы применимости
  2. Как отличить возможные причины
  3. Пошаговая диагностика и безопасное исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Симптом и границы применимости

PostgreSQL пишет no space left on device, когда исчерпаны блоки файловой системы, inode или место в отдельном табличном пространстве. Опасно удалять содержимое каталога pg_wal: это может сделать весь кластер невосстановимым.

#Как отличить возможные причины

Возможная причинаКак узнатьЧто делать
Заполнен раздел с даннымиФайловой системе некуда писать таблицы, временные данные или WAL.df -h показывает 100%Найти рост конкретного раздела
Исчерпаны inodeМесто в байтах есть, но новые файлы создать нельзя.df -i показывает 100%Найти множество мелких файлов
Другое tablespace/WALОшибку выдаёт файловая система, отличная от PGDATA.pg_tablespace_location указывает отдельный дискПроверить правильный том

#Пошаговая диагностика и безопасное исправление

  1. 1. Остановите опасные повторные записиПри сообщении no space left on device ограничьте повторные тяжёлые импорты/индексацию и уведомите дежурного. Не удаляйте pg_wal, global, base и файлы таблиц: это не временный мусор.
  1. 2. Определите конкретную файловую системуНа Linux-сервере в терминале проверьте блоки и inode. Подставьте настоящий путь каталога данных после проверки конфигурации; выполнение df безопасно и не требует прав администратора.
  2. Терминал Linux; чтение
    Linux · Терминал (Bash)Команда
    Терминал Linux; чтение. Каталог примерный — проверьте на вашем сервере реальный PGDATA и WAL.
    df -h /var/lib/postgresql
    df -i /var/lib/postgresql
  1. 3. Проверьте размещение основного каталога и WALЕсли PostgreSQL ещё доступен, спросите SHOW data_directory и через pg_settings параметр wal_directory не ищите — отдельной стандартной настройки с таким именем нет; WAL обычно находится в pg_wal, который может быть ссылкой на другой том.
    SQLКоманда
    psql, чтение. При остановленном сервере путь узнайте из конфигурации службы.
    SHOW data_directory;
  1. 4. Проверьте отдельно табличные пространстваВ psql прочитайте pg_tablespace_location для пользовательских tablespace, чтобы не чистить не тот диск. Каталоги из результата осмотрите через df; данные внутри них не удалять вручную.
  2. psql, чтение
    SQLКоманда
    psql, чтение. Пустой путь не означает отсутствие данных в основных tablespace.
    SELECT spcname, pg_tablespace_location(oid) AS location FROM pg_tablespace WHERE spcname NOT IN ('pg_default','pg_global');
  1. 5. Найдите безопасные кандидаты на освобождение местаПроверьте собственные журналы приложения, старые архивы резервных копий вне PGDATA, временные выгрузки и системные журналы. Удаляйте только явно опознанные неиспользуемые файлы по процедуре организации, сохраняя резервную копию.
  1. 6. Не устраняйте переполнение WAL вручнуюЕсли велик pg_wal, выясните, не удерживают ли сегменты репликационные слоты или отставшие реплики; удаление файлов вручную недопустимо. Проверьте архивирование, slots и мониторинг, прежде чем менять удержание.
  1. 7. Увеличьте ёмкость управляемым способомЕсли доступное место действительно исчерпано данными, используйте одобренное расширение тома, переезд tablespace или очистку ненужных бизнес-данных через SQL с копией и тестом. На почти полном диске VACUUM FULL требует дополнительного места и не подходит.
  1. 8. Проверьте запись и непрерывность журналаПосле восстановления свободного места выполните безопасный SELECT и маленькую транзакцию в тестовой таблице с последующим ROLLBACK. Убедитесь, что репликация и архивирование WAL исправны; повреждения после дискового сбоя требуют отдельной процедуры восстановления.

#Как проверить, что проблема устранена

На всех томах PGDATA, WAL и tablespace есть запас блоков и inode, новые транзакции проходят, логи не содержат повторных ENOSPC.

#Если исправление не помогло

Если место есть, но ошибка продолжается, проверьте квоты, контейнерные лимиты, inodes, временный каталог и сообщения ядра о файловой системе. Не отключайте fsync.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.