При переходе с MS SQL Server на PostgreSQL администраторы 1С часто сталкиваются с проблемой: файл выгрузки .dt, который успешно разворачивался на проприетарной СУБД от Microsoft, отказывается загружаться в Postgres. Ситуация осложняется тем, что процесс может прерываться без внятных объяснений или с ошибкой "загружены не все данные". В этой статье мы подробно разберем, почему PostgreSQL требует особого подхода при импорте больших объемов данных, как правильно рассчитать ресурсы и какие настройки СУБД критичны для успешного завершения операции.
Первое, что необходимо осознать: файл .dt — это сжатый архив данных 1С. При его загрузке в СУБД происходит не просто копирование, а полноценное построение таблиц и индексов. Коэффициент расширения данных в PostgreSQL значительно выше, чем в MS SQL Server.
Рассмотрим практический пример: файл .dt размером 13 Гб при разворачивании в PostgreSQL может занять до 130 Гб дискового пространства. Если ваша выгрузка весит 60 Гб, ориентируйтесь на то, что в базе она займет от 400 до 600 Гб. Это связано с особенностями хранения данных в Postgres:
Перед началом загрузки обязательно проверьте наличие свободного места с запасом минимум в 8-10 раз от размера .dt.
Если вы используете ОС семейства Linux (например, Debian или Ubuntu), стандартная команда df -h станет вашим главным инструментом. Часто ошибка загрузки возникает не из-за того, что на всем диске нет места, а из-за переполнения конкретного раздела.
Проанализируем ситуацию: в Linux система часто разбивается на разделы /, /var, /tmp и /home. Разберем, где могут возникнуть "узкие места":
/var/lib/postgresql/. Именно здесь будет расти основная база.pgsql_tmp..dt кластер 1С (процесс rphost) сначала распаковывает данные во временный каталог. По умолчанию это может быть /tmp или домашняя директория пользователя usr1cv8. Если раздел /tmp мал (например, выделено всего 50-100 Мб), загрузка прервется в самом начале.Рекомендуется убедиться, что и раздел с базой, и раздел с временными файлами имеют достаточно места для маневра.
Стандартные настройки PostgreSQL ("из коробки") ориентированы на максимальную сохранность данных и минимальное потребление ресурсов, что крайне мешает при загрузке базы объемом в сотни гигабайт. Разберем ключевые параметры в postgresql.conf, которые нужно изменить перед импортом:
.dt установите значение не менее 2-4 Гб.
maintenance_work_mem = 4GB
max_wal_size = 32GB
checkpoint_timeout = 30min
fsync. Это колоссально ускорит запись на диск.
Важно: после успешной загрузки обязательно верните значение в on!
fsync = off
Выясним разницу между обычным PostgreSQL и сборками для 1С. Для корректной работы с платформой необходимо использовать либо сборку от самой компании "1С" (доступна на портале ИТС), либо версию "Postgres Pro 1C" от отечественных разработчиков. В этих сборках присутствуют патчи:
Date (в 1С есть специфика с пустыми датами).Если использовать "ванильный" (чистый) Postgres, вы можете столкнуться с ошибками на этапе создания таблиц или загрузки специфических типов данных.
Рассмотрим итоговую последовательность действий, которая поможет избежать ошибок:
df -h. Убедитесь, что в разделах /var/lib/postgresql и /tmp достаточно места.pgtune и вручную увеличьте maintenance_work_mem и max_wal_size.drop database, так как она может занимать место в "полусобранном" состоянии./var/log/postgresql/. Если загрузка прервалась, откройте последний лог-файл — там будет четко указано, закончилось ли место (No space left on device) или произошел разрыв соединения.Таким образом, успех загрузки большой базы в PostgreSQL зависит от правильного планирования дискового пространства и тюнинга параметров записи логов. Помните, что PostgreSQL требует больше внимания к настройке, чем MS SQL, но при правильном подходе обеспечивает высокую производительность и надежность работы систем 1С.