Как перенести кластер баз 1С на PostgreSQL на 6 мажорных версий выше

    Перенос кластера баз данных 1С на PostgreSQL с версии, например, 9.x на 15.x или 16.x - задача нетривиальная. Прямой апгрейд через pg_upgrade возможен, но требует промежуточных шагов, так как пропускать более двух мажорных версий не рекомендуется. В этой статье разберём два основных метода: pg_upgrade и dump/restore, а также дадим практические рекомендации для СУБД под 1С.

    Метод 1: pg_upgrade с пошаговым обновлением

    Утилита pg_upgrade позволяет обновить бинарные файлы PostgreSQL без полного дампа. Но для перехода через 6 версий потребуется последовательно устанавливать промежуточные релизы.

    План действий для pg_upgrade

    • Установите новую версию PostgreSQL (например, 16.x) и все промежуточные версии (11, 12, 13, 14, 15).
    • Остановите кластер 1С и сделайте резервную копию каталога данных (через pg_dumpall или файловую копию).
    • Выполните pg_upgrade от текущей версии до следующей промежуточной. Повторяйте для каждой пары версий.
    • После каждого шага проверяйте целостность данных и запускайте vacuumdb --all.
    • После финального обновления переустановите расширения (например, pg_stat_statements), перечитайте конфигурацию и запустите ANALYZE.

    Важно: Для 1С критично сохранить настройки кодировки (UTF8) и локаль. Убедитесь, что в postgresql.conf указана правильная локаль (обычно ru_RU.UTF-8).

    Метод 2: dump/restore от новой версии

    Этот способ надёжнее, так как полностью пересоздаёт базу данных с учётом новой внутренней структуры. Он особенно рекомендуется, если вы не уверены в совместимости расширений или если база 1С содержит пользовательские типы.

    Пошаговая инструкция dump/restore

    • Установите целевую версию PostgreSQL (например, 16.x) на новый сервер или в отдельный каталог.
    • Сделайте дамп старой базы с помощью pg_dump -Fc dbname > backup.dump (формат custom - сжимает и сохраняет права).
    • Создайте пустую базу в новой версии: createdb -T template0 dbname (обязательно с той же кодировкой).
    • Восстановите дамп: pg_restore -d dbname --jobs=4 backup.dump. Параметр --jobs ускоряет процесс на многоядерных системах.
    • Запустите ANALYZE и обновите статистику: vacuumdb --analyze --all.

    Частые ошибки и их решение

    При миграции PostgreSQL для 1С часто возникают проблемы: несовместимость расширений (например, uuid-ossp заменён на pgcrypto в новых версиях), ошибки локали (если база создана с lc_collate=C, а новая версия ожидает ru_RU.UTF-8), большое время простоя - для крупных баз (100+ ГБ) dump/restore может длиться часы. Рекомендуется тестировать миграцию на копии данных.

    Рекомендации для кластеров 1С

    Перед обновлением обязательно: 1) согласуйте с техподдержкой 1С версию платформы, совместимую с новым PostgreSQL; 2) отключите фоновые задания и регламентные операции; 3) используйте транзакционный дамп (--no-blobs не нужен, так как 1С использует большие объекты). После миграции проверьте работу типовых отчётов и обработок.

    Заключение

    Выбор между pg_upgrade и dump/restore зависит от размера базы и доступного времени. Для кластеров 1С с объёмом данных до 100 ГБ и возможностью простоя в несколько часов dump/restore - более безопасный вариант. Если же нужно минимальное время недоступности, используйте pg_upgrade с обязательным тестированием на каждой промежуточной версии. В любом случае, создавайте резервные копии и проверяйте целостность данных после каждого шага.

    Часто задаваемые вопросы