Миграция 1С с MS SQL на PostgreSQL: инструкция в 6 шагов | infolimp.ru

Миграция 1С с MS SQL на PostgreSQL: инструкция в 6 шагов

27 апреля 2026 · infolimp.ru · 10 мин чтения

Автор: 1С Инсайдер · роль: практик 1С · проверка: типовые конфигурации и рабочие сценарии · 0 комментариев

Актуально на дату публикации 2026-04-27. PostgreSQL 14+ совместим с 1C:Enterprise 8.3.24+. Перед миграцией убедитесь, что версия вашей платформы поддерживает PostgreSQL и проведите полное резервное копирование MS SQL.

MS SQL стоит дорого. PostgreSQL — открытая, бесплатная, и для типовых 1C-систем работает столь же надёжно и быстро. Миграция требует 6 этапов планирования и настройки, но если сделать всё правильно, вы сэкономите лицензионные платежи и получите полный контроль над СУБД.

1. Почему компании переходят с MS SQL на PostgreSQL в 1С

Лицензионная модель MS SQL обходится дорого. Даже MS SQL Express (бесплатная версия) имеет жёсткие ограничения: максимальный размер базы данных — 10 ГБ, объём буферного пула RAM — не более 1,4 ГБ, а количество ядер CPU — не более 4. PostgreSQL лишена этих ограничений.

Преимущества PostgreSQL для 1С:

Типичные кандидаты на миграцию: филиалы с MS SQL Express, системы на виртуализации, облачные инсталляции (Azure, AWS), где платёж за MS SQL увеличивает общую стоимость владения.

2. Первые 3 этапа: оценка, планирование и подготовка

Этап 1: Аудит текущей инфраструктуры

Прежде чем трогать БД, ответьте на вопросы:

  1. Версия платформы 1С: Откройте 1С Предприятие → О программе. Для PostgreSQL 14+ рекомендуется версия 8.3.24 и выше. Если ниже — сначала обновите платформу.
  2. Размер БД: В Management Studio запросите: SELECT SUM(size)*8/1024 FROM sys.database_files; (размер в Мб). Если больше 100 Гб, к миграции нужно подготовиться серьёзнее.
  3. Пользователи: Узнайте количество одновременно работающих юзеров. PostgreSQL должна быть настроена на это количество+20%.
  4. Критичность системы: Можно ли выключить её на 4–8 часов? Миграция предполагает полный downtime.
  5. Расширения MS SQL: Используются ли в 1С SQL-функции, триггеры на уровне СУБД или CLR-объекты? Их потребуется переписать или адаптировать.
Совет: Если размер БД больше 500 Гб, используйте логический экспорт (через 1С-инструменты) вместо физической копии БД. Это дольше, но надёжнее при проблемах с совместимостью.

Этап 2: Резервная копия и виртуальная машина для тестирования

Главное правило: миграция никогда не проводится на продакшене в первый раз.

  1. В SQL Server Management Studio создайте полную резервную копию: BACKUP DATABASE [YourDB] TO DISK = 'D:\Backup\YourDB.bak';
  2. Разверните эту копию на тестовой виртуальной машине (не обязательно идентичной prod, но с типичной нагрузкой).
  3. На этой машине проведите все следующие этапы, чтобы выявить проблемы заранее.

Этап 3: Установка PostgreSQL и подготовка кластера

На сервере, где будет жить новая PostgreSQL:

  1. Скачайте специальную сборку PostgreSQL для 1С с сайта 1c.postgres.ru (Postgres Professional). Стандартный PostgreSQL с postgresql.org не подходит — в нём нет патчей, необходимых для совместимости с 1С. На Windows используйте installers (`.exe`), на Linux — пакетный менеджер (`apt`, `yum`).
  2. Во время установки задайте пароль для встроенного пользователя postgres. Сохраните его в защищённом месте.
  3. После установки откройте pgAdmin (графический клиент) или консоль psql.
  4. Увеличьте лимиты для 1С. Отредактируйте файл postgresql.conf (на Windows: Program Files\PostgreSQL\14\data\postgresql.conf):
max_connections = 500              # Вместо default 100
max_files_per_process = 2000       # Вместо 65
shared_buffers = 2GB               # 25% от RAM, но не больше
effective_cache_size = 6GB         # 50–75% от RAM
maintenance_work_mem = 256MB       # Для VACUUM
work_mem = 20MB                    # Для сортировок в запросах

После изменений перезагрузите PostgreSQL:

-- On Windows, via Services:
net stop postgresql-x64-14
net start postgresql-x64-14

-- On Linux:
sudo systemctl restart postgresql

3. Этапы 4–6: Миграция данных и оптимизация

Этап 4: Экспорт структуры и данных из MS SQL

Используйте встроенный инструмент 1С ibcmd (1C Command-Line Backup & Restore tool):

ibcmd REPLICATE
  --src "Srvr=YOUR_MSSQL_SERVER;Ref=YourDatabase;Usr=sa;Pwd=password;"
  --dst "File=/tmp/1c_export.dt;"

Эта команда экспортирует полную структуру и данные 1С в файл .dt (внутренний формат 1С). Время зависит от размера: 10 Гб примерно 30 мин.

Параллельно в PostgreSQL создайте пустую БД:

CREATE DATABASE "1c_db"
  ENCODING 'UTF8'
  LC_COLLATE='ru_RU.UTF-8'
  LC_CTYPE='ru_RU.UTF-8';

Этап 5: Импорт в PostgreSQL и миграция пользователей

Импортируйте экспортированный файл:

ibcmd RESTORE
  --src "File=/tmp/1c_export.dt;"
  --dst "Srvr=YOUR_POSTGRES_SERVER;Ref=1c_db;Usr=postgres;Pwd=password;";

Во время импорта 1С создаст все таблицы, индексы и заполнит данные. Это занимает больше всего времени (30–50% от общей длительности миграции).

⚠ Критично: Авторизационные данные пользователей хранятся в системной таблице v8users. После импорта пользователи могут потерять пароли. Восстановите их вручную либо переустановите через интерфейс 1С → Администрирование → Пользователи.
⚠ Внимание: Прямое изменение системных таблиц 1С (v8users и др.) через SQL официально не поддерживается. Используйте этот метод только при недоступности штатных инструментов и после резервного копирования.

Для административного пользователя установите пароль напрямую в PostgreSQL:

-- Скрипт на PL/pgSQL для сброса пароля администратора
UPDATE v8users
SET eauth = E'\\x...', admrole = true
WHERE user_id = 1;
-- (eauth должен содержать хеш нового пароля)

Этап 6: Тестирование, оптимизация и переключение на продакшн

На тестовом стенде с PostgreSQL:

  1. Запустите типовые отчёты (Реестр продаж, Оборотно-сальдовая ведомость, Регламент). Проверьте, что результаты совпадают со старой БД в MS SQL.
  2. Загрузочное тестирование: Подключите всех тестовых пользователей одновременно, запустите типовые операции (документы, справочники). Следите за CPU, памятью и временем отклика.
  3. Проверка совместимости NULL: PostgreSQL обрабатывает NULL иначе, чем MS SQL. Запрос NOT(NULL) в PostgreSQL вернёт NULL, а не FALSE. Если в 1С используются нестандартные SQL-функции, могут быть проблемы.
✓ Признак успешной миграции: все отчёты дают тот же результат, пользователи могут логироваться, операции выполняются с той же скоростью или быстрее.

После успешного тестирования спланируйте окно downtime (выходной день или ночь). Повторите этапы 4–5 на продакшене, но уже с реальной БД. Переключите 1С-клиентов на новый сервер PostgreSQL.

4. Типичные проблемы и их решение

ПроблемаПричинаРешение
Ошибка подключения из 1С: "Не удаётся подключиться" Firewall блокирует порт 5432 (default PostgreSQL), или PostgreSQL слушает только на localhost В postgresql.conf установите listen_addresses = '*', отредактируйте pg_hba.conf для разрешения подключений из сети
Запросы работают медленнее, чем на MS SQL PostgreSQL использует другой планировщик запросов, индексы могут быть неоптимальными Запустите ANALYZE; для обновления статистики, проверьте план выполнения запроса через EXPLAIN
Дневник регистрации 1С пуст или содержит ошибки после миграции Права доступа на таблицы или папки логирования некорректны Убедитесь, что пользователь postgres имеет права на создание объектов в БД, переиндексируйте таблицы
В отчётах отсутствуют некоторые значения (NULL-значения) PostgreSQL отличается от MS SQL в обработке NULL в выражениях Проверьте SQL-функции в конфигурации 1С, добавьте COALESCE() где необходимо
Производительность падает после нескольких дней работы PostgreSQL накапливает мёртвые строки (результат UPDATE/DELETE); VACUUM не срабатывает достаточно часто В postgresql.conf уменьшите параметр autovacuum_vacuum_scale_factor с 0.2 на 0.1, включите autovacuum_nap_time = 10s

5. Параметры PostgreSQL для оптимальной работы с 1С

После миграции не забудьте настроить PostgreSQL для стабильной работы под нагрузкой:

ПараметрЗначениеЗачем
log_statement none (в prod), all (в dev) Логирование SQL-команд. В продакшене выключите, чтобы не замедлять записи
log_lock_waits on Предупреждения о deadlock'ах и конфликтах блокировки
deadlock_timeout 1s Время ожидания перед обнаружением deadlock. Вместо стандартных 1s
synchronous_commit on (prod), off (dev/test) Безопасность vs производительность. В prod оставляйте on для надёжности
autovacuum on Автоматическая очистка мёртвых версий строк

6. Когда НЕ стоит переходить на PostgreSQL

Итого


Читайте также

НОПи автоматизирует миграцию структуры и данных, проверяет совместимость запросов и параметров PostgreSQL перед полным переносом на продакшн.

Попробовать миграцию →