Обновление версии СУБД 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
Это дает нам возможность развернуть новый кластер СУБД параллельно со старым, выполнить миграцию данных и переключать базы по одной, что значительно снижает риски.
Рассмотрим основные способы переноса баз в новый кластер:
Когда место на диске ограничено, а время простоя должно быть минимальным, мы выбираем 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.
После успешного перехода на новую версию (например, 14, 15 или 16), нам необходимо адаптировать файл postgresql.conf. Параметры из старой версии могут быть неоптимальными или вовсе удалены. Проанализируем критичные настройки:
jit = off и включать его только после проведения тестов.autovacuum_vacuum_scale_factor = 0.01.REINDEX DATABASE.Разберем по шагам последовательность действий для успешного обновления:
ANALYZE всех баз в старом кластере. Удаляем все временные таблицы (имена которых начинаются на v8_temp), оставшиеся после аварийных завершений сеансов.pg_upgrade с флагом --link.postgresql.conf в новый, учитывая изменения в параметрах JIT и параллелизма.ANALYZE и, при необходимости, REINDEX в новом кластере.Следуя этому алгоритму, мы минимизируем риски потери данных и обеспечиваем максимально быстрый переход на актуальную версию СУБД, что позволит использовать все современные возможности оптимизации запросов и повышения стабильности системы 1С.