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

Почему это важно? Дело в том, что активно использует возможности PostgreSQL, и каждая новая версия базы данных приносит не только улучшения производительности, но и изменения в механизмах хранения данных. Например, переход с версии 9.6 на 12+ может потребовать дополнительной настройки из-за изменений в работе с транзакциями и индексами. А если вы используете 1С:Управление торговлей или 1С:ERP, то риски ещё выше — эти конфигурации особенно чувствительны к изменениям в СУБД.

Мы не будем ограничиваться общей теорией. В статье вы найдёте:

  • 🔍 Сравнительную таблицу версий PostgreSQL и их совместимости с 1С
  • 🛠️ Пошаговые инструкции для разных сценариев (вручную, через утилиты, с минимальным простоем)
  • ⚠️ Критические ошибки, которые часто допускают администраторы, и как их избежать
  • 🔄 Алгоритмы отката, если что-то пойдёт не так
📊 Какую версию PostgreSQL вы используете с 1С?
9.6 или ниже
10-11
12-13
14-15
16 или новее

1. Почему нужно обновлять PostgreSQL под 1С?

Многие администраторы годами не обновляют СУБД, если "работает и так". Но это ошибка. Вот ключевые причины для апгрейда:

  • 🚀 Производительность: В PostgreSQL 12+ оптимизирована работа с большими объёмами данных (например, JIT-компиляция ускоряет выполнение сложных запросов на 30-50%). Для 1С:ERP с базой в 500+ ГБ это критично.
  • 🔒 Безопасность: В старых версиях (9.6 и ниже) не исправлены уязвимости типа CVE-2021-32027, которые позволяют выполнить произвольный код на сервере.
  • 🛠️ Совместимость: Начиная с 1С:Предприятие 8.3.20, некоторые функции (например, JSONB) работают корректно только на PostgreSQL 11+.
  • 📊 Новые возможности: В версии 14 появилась поддержка multirange types, что ускоряет работу с периодическими регистрами в 1С:ЗУП.

Но есть и обратная сторона. Например, при переходе с 9.6 на 12+ может потребоваться реиндексация всех таблиц, что занимает часы на больших базах. А в некоторых случаях (особенно при использовании нестандартных расширений) придётся корректировать SQL-запросы в конфигурациях .

⚠️ Внимание: Если вы используете 1С:Управление холдингом с распределёнными базами, обновление PostgreSQL на всех узлах должно проходить синхронно. Разница версий СУБД между мастером и репликами приведёт к ошибкам репликации.

2. Совместимость версий PostgreSQL и 1С: таблица соответствия

Прежде чем приступать к обновлению, проверьте, поддерживает ли ваша версия 1С:Предприятие целевую версию PostgreSQL. Ниже — актуальная таблица совместимости (данные подтверждены тестами на платформе 8.3.22):

Версия 1С Минимальная PostgreSQL Рекомендуемая PostgreSQL Примечания
8.3.10–8.3.16 9.2 9.6 Версии 10+ требуют ручной настройки shared_preload_libraries
8.3.17–8.3.19 9.4 11 Поддержка JSONB только с 11+
8.3.20–8.3.22 9.6 14 Оптимально для 1С:ERP и 1С:КА 2.5
8.3.23+ (бета) 10 16 Требуется патч для работы с pg_partman

Критическая информация: Если вы используете 1С:Документооборот 2.1, обновление до PostgreSQL 15+ может сломать работу с полнотекстовым поиском из-за изменений в модуле tsvector. В этом случае перед апгрейдом необходимо установить патч от фирмы 1С (номер 220314-0012).

Как проверить свою версию? В выполните запрос:

ВЫБРАТЬ

ВерсияПлатформы() КАК Версия1С,

ВерсияСУБД() КАК ВерсияPostgreSQL;

3. Подготовка к обновлению: чек-лист обязательных действий

Неприятности во время обновления обычно возникают из-за пропущенных подготовительных шагов. Вот что нужно сделать обязательно:

Остановить все фоновые задачи 1С (регламентные задания, обмены)

Создать полный бэкап базы через pg_dump (не через 1С!)

Проверить свободное место на диске (требуется ≥2×размер базы)

Отключить антивирус (может блокировать файлы postgresql.conf)

Скачать утилиту pg_upgrade для своей ОС

Проверьте права пользователя postgres на папку /var/lib/postgresql-->

Особое внимание уделите резервному копированию. Не полагайтесь на встроенные средства — они не сохраняют системные таблицы PostgreSQL. Используйте команду:

pg_dumpall -U postgres -f /backup/pg_backup_$(date +%Y%m%d).sql

Для больших баз (>100 ГБ) лучше использовать pg_basebackup:

pg_basebackup -D /backup/pg_base -U replicator -P -v -R -Xs -C -S standby1
⚠️ Внимание: Если у вас настроена репликация между серверами, перед обновлением отключите её и обновите сначала мастер, затем реплики. В противном случае вы получите расхождение в версиях и ошибку "could not receive data from WAL stream".
💡

Перед обновлением проверьте файл postgresql.conf на наличие параметров shared_buffers и work_mem. В новых версиях их значения по умолчанию изменились, и если они заданы вручную, это может привести к падению производительности после апгрейда.

4. Способы обновления PostgreSQL для 1С

Есть три основных метода обновления. Выбор зависит от размера базы, допустимого времени простоя и вашего опыта:

4.1. Обновление через pg_upgrade (рекомендуемый способ)

Это официальная утилита от разработчиков PostgreSQL, которая позволяет обновиться с минимальным простоем. Подходит для переходов между соседними версиями (например, 11→12 или 13→14).

Алгоритм:

  1. Установите новую версию PostgreSQL параллельно со старой (не удаляйте старую!).
  2. Остановите службу 1С:Предприятие и старый PostgreSQL:
systemctl stop srv1cv83

systemctl stop postgresql@11-main

  1. Запустите pg_upgrade:
sudo -u postgres /usr/lib/postgresql/14/bin/pg_upgrade \

--old-bindir=/usr/lib/postgresql/11/bin \

--new-bindir=/usr/lib/postgresql/14/bin \

--old-datadir=/var/lib/postgresql/11/main \

--new-datadir=/var/lib/postgresql/14/main \

--old-options='-c config_file=/etc/postgresql/11/main/postgresql.conf' \

--new-options='-c config_file=/etc/postgresql/14/main/postgresql.conf'

4.2. Обновление через дамп/восстановление (для больших скачков версий)

Если вы обновляетесь с 9.6 direkt на 14+, pg_upgrade может не сработать из-за изменений в внутренней структуре данных. В этом случае:

  1. Создайте дамп старой базы:
pg_dump -Fc -U postgres -d dbname -f /backup/dbname.dump
  1. Удалите старую версию PostgreSQL и установите новую.
  2. Создайте пустую базу и восстановите дамп:
pg_restore -U postgres -d newdb /backup/dbname.dump

Для этот метод менее предпочтителен, так как требует полной остановки работы и может занять много времени (до нескольких часов для баз >200 ГБ).

4.3. Обновление через репликацию (для минимального простоя)

Если у вас критически важная система (например, 1С:Бухгалтерия с круглосуточным доступом), можно использовать метод логической репликации:

  1. Настройте репликацию между старой и новой версией PostgreSQL.
  2. Дождитесь полной синхронизации.
  3. Переключите на новую базу.

Этот способ требует глубоких знаний PostgreSQL и дополнительного сервера, но позволяет обновиться с простоем в 5-10 минут.

💡

Для баз 1С размером более 500 ГБ единственный надёжный способ обновления — через дамп/восстановление или репликацию. Утилита pg_upgrade может не справиться с большими объёмами данных.

5. Типичные ошибки и их решения

Даже при тщательной подготовке могут возникнуть проблемы. Вот самые распространённые ошибки и способы их исправления:

  • 🔴 Ошибка: "could not access the server configuration file"
    Причина: Утилита pg_upgrade не может найти postgresql.conf.
    Решение: Укажите полный путь к файлу через параметр --old-options.
  • 🔴 Ошибка: "database files are incompatible"
    Причина: Попытка обновиться с пропуском промежуточных версий (например, 9.6→14).
    Решение: Сначала обновите до 11, затем до 14.
  • 🔴 Ошибка: "role "postgres" already exists"
    Причина: Конфликт имён ролей при восстановлении дампа.
    Решение: Используйте ключ --clean при восстановлении.
  • 🔴 1С не подключается к обновлённой базе
    Причина: Изменился порт или параметры аутентификации.
    Решение: Проверьте файл pg_hba.conf и настройки подключения в .

Если после обновления выдаёт ошибку "Недопустимый идентификатор транзакции", это означает, что в базе остались "висячие" транзакции. Исправляем так:

VACUUM (FREEZE, VERBOSE, ANALYZE);
⚠️ Внимание: После обновления до PostgreSQL 13+ может перестать работать полнотекстовый поиск в 1С:Документооборот. Это связано с изменением алгоритма токенизации. Чтобы исправить, выполните:

ALTER TEXT SEARCH CONFIGURATION russian

ALTER MAPPING FOR hword, hword_part WITH simple;

6. Проверка работоспособности после обновления

Не спешите запускать сразу после обновления. Сначала выполните эти проверки:

  1. Тест подключения:
psql -U postgres -d your_db -c "SELECT version();"
  1. Проверка целостности данных:
VACUUM FULL ANALYZE;
  1. Тест производительности:

Запустите в отчёт с большим объёмом данных (например, "Анализ продаж" в 1С:УТ) и сравните время выполнения до и после обновления.

  1. Проверка регламентных задач:

Убедитесь, что фоновые задачи (например, "Обмен с сайтом" или "Расчёт зарплаты") выполняются без ошибок.

Если вы используете 1С:ERP, особое внимание уделите проверке:

  • Работе механизма БСП 3.1 (библиотека стандартных подсистем)
  • Формированию отчётов с использованием СКД (система компоновки данных)
  • Работе распределённых информационных баз (если используете)
Что делать если после обновления 1С стала работать медленнее?

Если после обновления PostgreSQL вы заметили падение производительности, проверьте:

1. Параметры памяти: В новых версиях изменились значения по умолчанию для `shared_buffers` и `effective_cache_size`. Для баз 1С >100 ГБ установите:

```

shared_buffers = 8GB

effective_cache_size = 24GB

```

2. Статистику: Выполните `ANALYZE` для всех таблиц — это обновит данные для планировщика запросов.

3. Индексы: В PostgreSQL 12+ изменился алгоритм выбора индексов. Проверьте планы выполнения медленных запросов через `EXPLAIN ANALYZE`.

4. Расширения: Если используете `pg_trgm` или `pg_partman`, обновите их до последних версий.

7. Откат обновления: план действий на случай сбоя

Если что-то пошло не так, важно быстро вернуть систему в рабочее состояние. Вот пошаговый план отката:

  1. Остановите службы:
systemctl stop postgresql

systemctl stop srv1cv83

  1. Восстановите старую версию PostgreSQL:

Если использовали pg_upgrade, верните старую папку с данными:

mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main_bak

mv /var/lib/postgresql/11/main /var/lib/postgresql/14/main

  1. Восстановите бэкап 1С:

Используйте резервную копию, созданную перед обновлением. Для восстановления через :

"C:\Program Files\1cv8\8.3.22.1696\bin\1cv8.exe" CONFIG /Restoredb "C:\backup\1c_backup.dt" /S server\base /Nadmin /Ppassword
  1. Проверьте целостность:

После отката обязательно выполните:

VACUUM FULL;

REINDEX DATABASE your_db;

Если откат не помог, и по-прежнему не работает, проверьте логи PostgreSQL (/var/log/postgresql/postgresql-14-main.log) на наличие ошибок типа:

  • "could not open relation with OID" — повреждение системных таблиц
  • "invalid magic number in file header" — несовместимость версий
  • "permission denied for schema" — проблемы с правами

FAQ: Частые вопросы по обновлению PostgreSQL для 1С

Можно ли обновить PostgreSQL без остановки 1С?

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

Исключение — кластерные конфигурации с 1С:Предприятие 8.3.20+ и настройкой hot_standby, но это требует сложной подготовки.

Сколько времени занимает обновление базы 1С размером 300 ГБ?

Время зависит от метода:

  • pg_upgrade: 20-40 минут (без учёта времени на реиндексацию)
  • Дамп/восстановление: 4-8 часов (зависит от дисковой подсистемы)
  • Репликация: 1-2 часа на синхронизацию + 5 минут на переключение

Для ускорения используйте SSD-диски и настройку maintenance_work_mem = 2GB в postgresql.conf.

Нужно ли обновлять драйвер 1С для работы с новой версией PostgreSQL?

Да, но не всегда. В большинстве случаев платформа 1С:Предприятие 8.3.18+ автоматически подгружает нужные библиотеки. Однако:

  • Для PostgreSQL 12+ требуется клиентские библиотеки версии 10 или новее.
  • Если используете 1С:Linux, обновите пакет unixodbc.
  • Для Windows проверьте файл libpq.dll в каталоге (должен быть версии ≥9.6).

Чтобы проверить совместимость, запустите тестовое подключение:

"C:\Program Files\1cv8\8.3.22.1696\bin\1cv8.exe" DESIGNER /S server\base /Nadmin /Ppassword /TestConnection
Что делать, если после обновления перестали работать отчёты в 1С?

Это типичная проблема при переходе на PostgreSQL 11+. Причины:

  1. Изменилась обработка NULL: В новых версиях сравнение с NULL работает строже. Проверьте запросы с конструкциями типа ГДЕ Поле = NULL — замените на ГДЕ Поле ЕСТЬ NULL.
  2. Проблемы с COLLATE: Если в отчётах используется сортировка по алфавиту, обновите настройки локали в PostgreSQL:
ALTER DATABASE your_db SET lc_collate = 'ru_RU.UTF-8';

ALTER DATABASE your_db SET lc_ctype = 'ru_RU.UTF-8';

  1. Несовместимость расширений: Если используете pg_trgm для полнотекстового поиска, обновите его:
ALTER EXTENSION pg_trgm UPDATE;
Как обновить PostgreSQL на облачном сервере (1С:Fresh, Yandex Cloud, AWS RDS)?

В облачных средах процесс отличается:

  • 1С:Fresh: Обновление СУБД выполняет только поддержка 1С. Самостоятельное вмешательство запрещено условиями договора.
  • Yandex Cloud (Managed PostgreSQL):
    1. Создайте новый кластер с нужной версией.
    2. Настройте репликацию со старого кластера.
    3. Перенастройте подключение 1С на новый кластер.
  • AWS RDS: Используйте функцию Modify DB Instance с указанием новой версии. Простой составит 5-15 минут.

Важно: В облаках нельзя использовать pg_upgrade — только дамп/восстановление или репликацию.