Как обновить PostgreSQL на сервере 1С: пошаговый алгоритм миграции с минимальным простоем

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Обновление версии СУБД PostgreSQL в связке с сервером 1С — это задача, требующая не только аккуратности, но и понимания специфики работы обеих систем. Часто администраторы сталкиваются с ограничениями дискового пространства и жесткими рамками технологического окна. В этой статье мы подробно разберем, как перейти на современные версии PostgreSQL, сохранив стабильность работы баз данных 1С.

Выбор дистрибутива и подготовка окружения

Прежде всего, нам необходимо определиться с версией и сборкой СУБД. Важно понимать, что для работы с 1С крайне не рекомендуется использовать «ванильный» PostgreSQL с официального сайта разработчиков. Разберем почему. Платформа 1С:Предприятие использует специфические механизмы управления блокировками и полнотекстового поиска, которые требуют наложения специальных патчей на исходный код PostgreSQL. Мы рекомендуем использовать сборки от компании Postgres Pro (версия 1C) или дистрибутивы, доступные на портале ИТС в разделе дополнительных компонентов.

Если ваша текущая система работает на Windows Server 2008, помните, что современные версии PostgreSQL (начиная с 13-й и выше) официально не поддерживают эту ОС. В таком случае перед обновлением СУБД нам потребуется рассмотреть вопрос миграции на Windows Server 2012 R2 или более новые версии, а в идеале — на современные дистрибутивы Linux, где производительность PostgreSQL зачастую выше. Для автоматизации развертывания в Linux-окружении можно использовать сценарий Python для установки и обновления PostgreSQL и сервера 1С.

Работа с несколькими экземплярами на одном сервере

Один из ключевых вопросов: умеет ли сервер 1С работать с несколькими версиями PostgreSQL одновременно? Проанализируем ситуацию. Сервер 1С позволяет подключаться к любому адресу и порту. Это означает, что мы можем установить новую версию PostgreSQL на тот же физический сервер, просто назначив ей другой порт (например, 5433 вместо стандартного 5432).

Для настройки подключения в консоли администрирования 1С в поле «Сервер баз данных» достаточно указать строку вида:

localhost port=5433

Это дает нам возможность развернуть новый кластер СУБД параллельно со старым, выполнить миграцию данных и переключать базы по одной, что значительно снижает риски.

Методы миграции данных: выбираем оптимальный

Рассмотрим основные способы переноса баз в новый кластер:

  1. Выгрузка и загрузка через *.dt файл: Самый долгий способ. Подходит только для очень маленьких баз. Основной минус — высокая нагрузка на сервер 1С и долгое время ожидания.
  2. pg_dump и pg_restore: Стандартные утилиты PostgreSQL. Работают надежно, позволяют переносить данные между разными мажорными версиями. Однако при больших объемах данных (терабайты) процесс может затянуться на многие часы.
  3. pg_upgrade: Самый быстрый и эффективный метод для обновления мажорных версий. Проанализируем его подробнее.

Использование pg_upgrade с флагом --link

Когда место на диске ограничено, а время простоя должно быть минимальным, мы выбираем pg_upgrade с параметром --link. Рассмотрим, как это работает. Вместо физического копирования файлов данных утилита создает жесткие ссылки (hard links) между старым и новым каталогами данных.

Преимущества этого подхода:

Посмотрим на пример команды для выполнения обновления (пути указаны для примера):


pg_upgrade.exe
--old-datadir "C:/PostgreSQL/11/data"
--new-datadir "C:/PostgreSQL/15/data"
--old-bindir "C:/PostgreSQL/11/bin"
--new-bindir "C:/PostgreSQL/15/bin"
--link

Важное примечание: При использовании --link мы не сможем запустить старый кластер после успешного обновления. Поэтому обязательно наличие актуальной резервной копии перед началом процедуры. Для этого можно использовать решение для резервного копирования PostgreSQL по правилу 3-2-1-1-0.

Тонкая настройка PostgreSQL для 1С

После успешного перехода на новую версию (например, 14, 15 или 16), нам необходимо адаптировать файл postgresql.conf. Параметры из старой версии могут быть неоптимальными или вовсе удалены. Проанализируем критичные настройки:

  1. JIT (Just-in-Time compilation): В новых версиях JIT включен по умолчанию. Для специфических запросов 1С это часто приводит к деградации производительности. Мы рекомендуем установить jit = off и включать его только после проведения тестов.
  2. Autovacuum: 1С активно создает и удаляет временные данные. Чтобы база не «распухала», настроим агрессивную очистку. Установим autovacuum_vacuum_scale_factor = 0.01.
  3. Локали и ICU: Начиная с PostgreSQL 15, поддержка ICU стала более глубокой. Если вы переходите со старых версий, убедитесь, что порядок сортировки индексов не изменился. В некоторых случаях после миграции может потребоваться выполнение команды REINDEX DATABASE.

Алгоритм действий (чек-лист)

Разберем по шагам последовательность действий для успешного обновления:

  1. Подготовительный этап: Выполняем ANALYZE всех баз в старом кластере. Удаляем все временные таблицы (имена которых начинаются на v8_temp), оставшиеся после аварийных завершений сеансов.
  2. Резервное копирование: Делаем полные бэкапы всех критичных баз средствами СУБД.
  3. Установка новой версии: Устанавливаем новую сборку PostgreSQL (от 1C/Postgres Pro) на другой порт.
  4. Остановка служб: Останавливаем службу сервера 1С и службу старого PostgreSQL.
  5. Миграция: Запускаем pg_upgrade с флагом --link.
  6. Конфигурирование: Переносим настройки из старого postgresql.conf в новый, учитывая изменения в параметрах JIT и параллелизма.
  7. Запуск и проверка: Запускаем новую службу PostgreSQL. В консоли 1С меняем порт подключения для баз. Запускаем службу 1С и проверяем работу пользователей.
  8. Финальный штрих: Выполняем ANALYZE и, при необходимости, REINDEX в новом кластере.

Следуя этому алгоритму, мы минимизируем риски потери данных и обеспечиваем максимально быстрый переход на актуальную версию СУБД, что позволит использовать все современные возможности оптимизации запросов и повышения стабильности системы 1С.

← На главную