Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

58P02 1С:Предприятие и СУБД

PostgreSQL Error 58P02 duplicate_file: Устранение Конфликтов Файлов

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка выполнения DDL: ERROR: 58P02: could not create file "...": File exists.
  • Сбой выполнения команды CREATE DATABASE или CREATE TABLESPACE.
  • Невозможность инициализации нового логического тома или партиции в 1С:Предприятие.
  • Отказ клонирования базы данных из шаблона (TEMPLATE).

1. Причина возникновения ошибки 58P02

Ошибка генерируется, когда PostgreSQL пытается создать новый каталог или файл на диске под новый объект (таблицу, базу, tablespace), но в файловой системе уже присутствует файл или папка с идентичным именем (OID) от ранее удаленного или аварийно упавшего объекта.

2. Сценарий: Конфликт при CREATE TABLESPACE

Попытка создать табличное пространство в директории, где уже есть файлы:

-- Ошибка: directory "/mnt/fast_disk/pg_ts" is not empty

-- Решение (в консоли ОС): 
# 1. Проверьте содержимое каталога:
ls -la /mnt/fast_disk/pg_ts

# 2. Очистите пустой каталог (убедившись, что там нет боевых данных!):
rm -rf /mnt/fast_disk/pg_ts/*

# 3. Выполните повторно в psql:
CREATE TABLESPACE fast_space LOCATION '/mnt/fast_disk/pg_ts';

3. Сценарий: Конфликт OID при создании базы данных (CREATE DATABASE)

Если процесс создания базы был прерван сигналом SIGKILL, в каталоге $PGDATA/base/ могла остаться папка со старым OID:

-- 1. Найдите OID всех зарегистрированных баз данных:
SELECT oid, datname FROM pg_database;

-- 2. Сравните с папками в $PGDATA/base/ (в терминале Linux):
cd /var/lib/postgresql/data/base/
ls -d */

-- 3. Если в каталоге есть папка с номером, которого НЕТ в pg_database, переместите ее в бэкап:
mv 24512 /tmp/orphaned_24512

4. Проверка остаточных файлов после аварийного сбоя реляций

Если таблица не создается из-за дубликата relfilenode, выполните полную проверку целостности каталога через VACUUM FULL системных таблиц.

💡 Практика специалистов: Перед созданием нового Tablespace убедитесь, что целевой каталог абсолютно пуст и права на него переданы пользователю postgres. Наличие даже одного скрытого файла (например, .lost+found) вызовет ошибку 58P02.

Частые вопросы (FAQ)

Откуда берутся файлы-сироты (orphaned files), вызывающие 58P02?

Они возникают в результате аварийной жесткой перезагрузки сервера (hard reset) во время выполнения тяжелых DDL операций, либо при ручном восстановлении отдельных папок из резервных копий.

Можно ли просто удалить конфликтующий файл через rm?

Только после строгой проверки, что данный файл/папка не зарегистрированы в системных каталогах pg_class, pg_database или pg_tablespace.

Как избежать конфликтов при автоматическом тестировании баз 1С?

Всегда проверяйте успешность завершения DROP DATABASE перед вызовом CREATE DATABASE и используйте уникальные постфиксы времени в именах временных баз.

Каковы правильные права доступа к создаваемым каталогам табличных пространств?

Каталог должен принадлежать пользователю postgres с маской прав 0700 (drwx------).

Полезные материалы
Рекомендуем