Миграция 1С с MS SQL на PostgreSQL: инструкция в 6 шагов
Актуально на дату публикации 2026-04-27. PostgreSQL 14+ совместим с 1C:Enterprise 8.3.24+. Перед миграцией убедитесь, что версия вашей платформы поддерживает PostgreSQL и проведите полное резервное копирование MS SQL.
1. Почему компании переходят с MS SQL на PostgreSQL в 1С
Лицензионная модель MS SQL обходится дорого. Даже MS SQL Express (бесплатная версия) имеет жёсткие ограничения: максимальный размер базы данных — 10 ГБ, объём буферного пула RAM — не более 1,4 ГБ, а количество ядер CPU — не более 4. PostgreSQL лишена этих ограничений.
Преимущества PostgreSQL для 1С:
- Стоимость: Полностью бесплатная лицензия. Нет платежей за CAL, расширенный объём памяти или количество ядер.
- Производительность: На тех же аппаратных ресурсах PostgreSQL часто показывает равную или лучшую производительность, чем MS SQL Express, благодаря оптимизированному планировщику запросов.
- Масштабируемость: Нет встроенных ограничений на объём БД или количество пользователей.
- Прозрачность: Весь исходный код открыт, вы не зависите от Microsoft и можете использовать любых хостеров или облачные платформы.
- Готовность 1С: PostgreSQL поддерживается в 1С:Предприятие начиная с ранних версий 8.3.x. Для работы с PostgreSQL 14+ рекомендуется платформа 8.3.24 и выше. Важно: для 1С требуется специально собранная версия PostgreSQL — стандартный дистрибутив с postgresql.org не подходит. Используйте сборку с сайта 1c.postgres.ru (Postgres Professional) или официальный дистрибутив от 1С.
Типичные кандидаты на миграцию: филиалы с MS SQL Express, системы на виртуализации, облачные инсталляции (Azure, AWS), где платёж за MS SQL увеличивает общую стоимость владения.
2. Первые 3 этапа: оценка, планирование и подготовка
Этап 1: Аудит текущей инфраструктуры
Прежде чем трогать БД, ответьте на вопросы:
- Версия платформы 1С: Откройте 1С Предприятие → О программе. Для PostgreSQL 14+ рекомендуется версия 8.3.24 и выше. Если ниже — сначала обновите платформу.
- Размер БД: В Management Studio запросите:
SELECT SUM(size)*8/1024 FROM sys.database_files;(размер в Мб). Если больше 100 Гб, к миграции нужно подготовиться серьёзнее. - Пользователи: Узнайте количество одновременно работающих юзеров. PostgreSQL должна быть настроена на это количество+20%.
- Критичность системы: Можно ли выключить её на 4–8 часов? Миграция предполагает полный downtime.
- Расширения MS SQL: Используются ли в 1С SQL-функции, триггеры на уровне СУБД или CLR-объекты? Их потребуется переписать или адаптировать.
Этап 2: Резервная копия и виртуальная машина для тестирования
Главное правило: миграция никогда не проводится на продакшене в первый раз.
- В SQL Server Management Studio создайте полную резервную копию:
BACKUP DATABASE [YourDB] TO DISK = 'D:\Backup\YourDB.bak'; - Разверните эту копию на тестовой виртуальной машине (не обязательно идентичной prod, но с типичной нагрузкой).
- На этой машине проведите все следующие этапы, чтобы выявить проблемы заранее.
Этап 3: Установка PostgreSQL и подготовка кластера
На сервере, где будет жить новая PostgreSQL:
- Скачайте специальную сборку PostgreSQL для 1С с сайта 1c.postgres.ru (Postgres Professional). Стандартный PostgreSQL с postgresql.org не подходит — в нём нет патчей, необходимых для совместимости с 1С. На Windows используйте installers (`.exe`), на Linux — пакетный менеджер (`apt`, `yum`).
- Во время установки задайте пароль для встроенного пользователя
postgres. Сохраните его в защищённом месте. - После установки откройте pgAdmin (графический клиент) или консоль psql.
- Увеличьте лимиты для 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С → Администрирование → Пользователи.Для административного пользователя установите пароль напрямую в PostgreSQL:
-- Скрипт на PL/pgSQL для сброса пароля администратора
UPDATE v8users
SET eauth = E'\\x...', admrole = true
WHERE user_id = 1;
-- (eauth должен содержать хеш нового пароля)
Этап 6: Тестирование, оптимизация и переключение на продакшн
На тестовом стенде с PostgreSQL:
- Запустите типовые отчёты (Реестр продаж, Оборотно-сальдовая ведомость, Регламент). Проверьте, что результаты совпадают со старой БД в MS SQL.
- Загрузочное тестирование: Подключите всех тестовых пользователей одновременно, запустите типовые операции (документы, справочники). Следите за CPU, памятью и временем отклика.
- Проверка совместимости 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
- Используются T-SQL функции и триггеры. Если в MS SQL есть сложная логика на уровне СУБД (T-SQL), придётся переписывать на PL/pgSQL.
- В конфигурации 1С стоят расширения на C# (CLR). PostgreSQL не поддерживает CLR-объекты, их нужно переносить в код 1С.
- Реальное время критично (> 100 операций в сек). PostgreSQL медленнее на очень высоконагруженных системах (ежедневно миллионы записей), чем оптимизированный Oracle.
- Требуется лицензия на коммерческую поддержку. PostgreSQL имеет сообщество, но нет официальной поддержки от вендора, как в MS SQL.
Итого
- PostgreSQL экономит лицензионные платежи и обеспечивает равную производительность для большинства 1С-систем.
- Миграция требует 6 этапов: аудит → резервная копия → установка PG → экспорт данных → импорт → тестирование.
- Первый запуск всегда проводится на тестовой машине, затем на prod во время плановых выходных.
- Параметры PostgreSQL (max_connections, shared_buffers, autovacuum) нужно настроить под вашу нагрузку.
- Основные подводные камни: NULL-обработка, права доступа, автоматическая очистка таблиц (VACUUM).
Читайте также
Попробовать миграцию →