Обновление сборки PostgreSQL для 1С: минорный патч и переход на новую версию
Содержание
Чтобы установить патч PostgreSQL для 1С, остановите сервер 1С, сделайте резервную копию через pg_dump, поставьте новую сборку той же мажорной версии поверх старой и запустите службы. Если меняется мажорная версия (например, 14 на 16), простой установки поверх мало: нужен pg_upgrade или выгрузка и загрузка баз.
Главная ловушка — поставить «обычный» PostgreSQL из репозитория ОС. Базы 1С на нём не откроются: в ванильной сборке нет типов и расширений, которые нужны платформе. Поэтому перед любым обновлением проверяйте, от какого поставщика сборка и есть ли в ней расширения 1С.
Чем сборка PostgreSQL для 1С отличается от обычной
1С работает только с PostgreSQL, к которому применён набор патчей. Эти патчи добавляют то, чего нет в стандартной поставке:
- 🔤 тип
mchar/mvarchar— строки без учёта регистра в стиле MS SQL, на них построены таблицы 1С; - 🔎 расширение
fulltextsearchи словари для полнотекстового поиска; - ⚡
fasttrun— быстрая очистка временных таблиц, которые платформа создаёт постоянно; - 📊
online_analyzeиplantuner— обновление статистики временных таблиц и подсказки планировщику.
Готовые сборки выпускают две стороны: фирма 1С (дистрибутивы и архив патчей для самостоятельной сборки) и компания Postgres Professional (бесплатная сборка «PostgreSQL для 1С» с репозиториями под популярные дистрибутивы Linux и инсталлятором под Windows). Обе подходят. Главное — не смешивать их в рамках одного обновления без необходимости: каталоги установки, имена служб и пакетов у них разные.
«Патч» в разговоре администраторов обычно означает одно из двух: новую минорную сборку (15.6 → 15.8) или переход на следующую мажорную версию. Это разные процедуры с разным риском, поэтому сначала определите, какой у вас случай.
Совместимость версий 1С и PostgreSQL: что проверить до установки патча
Сначала узнайте, что стоит сейчас. В psql или pgAdmin выполните:
SELECT version();
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE name IN ('mchar', 'fulltextsearch', 'fasttrun', 'online_analyze', 'plantuner');
Если запрос вернул строки с этими расширениями — у вас сборка для 1С. Пустой результат означает ванильный PostgreSQL, и это уже отдельная проблема.
Дальше сверьте три вещи:
| Что сверить | Где смотреть | Что будет при несовпадении |
|---|---|---|
| Мажорная версия PostgreSQL поддерживается вашей платформой 1С | Список поддерживаемых СУБД в описании релиза платформы | Сервер 1С откажется работать с базой или будет работать нестабильно |
| Сборка именно «для 1С» той же линейки | Имя дистрибутива или пакета, вывод pg_available_extensions | Базы не откроются, ошибки про тип mchar |
| Разрядность и ОС | Требования дистрибутива | Инсталлятор не встанет или служба не запустится |
Мажорную версию PostgreSQL поднимайте только тогда, когда ваша платформа 1С официально её поддерживает. Минорные сборки внутри одной мажорной линейки платформа принимает без вопросов, поэтому минорный патч можно ставить, не обновляя 1С.
Если нужен переход на новую мажорную версию, а платформа её ещё не знает, порядок такой: сначала обновить платформу 1С на сервере и клиентах до номера не ниже требуемого, потом PostgreSQL.
Подготовка к установке патча PostgreSQL
Обновление СУБД обрывает все сеансы 1С. Планируйте его на нерабочее время и предупредите пользователей заранее.
Резервные копии делаются так:
# каждая база отдельно, сжатый формат
pg_dump -U postgres -Fc -f /backup/buh_$(date +%F).dump buh
# роли, пароли, табличные пространства
pg_dumpall -U postgres --globals-only -f /backup/globals_$(date +%F).sql
На Windows те же команды запускаются из каталога bin установленного PostgreSQL. Дополнительно можно выгрузить каждую базу в .dt через Конфигуратор: Администрирование → Выгрузить информационную базу. Это страховка на случай, если восстанавливать придётся на другом сервере или другой СУБД.
Проверьте, что копия читается: pg_restore -l файл.dump должен вывести оглавление без ошибок. Неоткрывающийся дамп хуже, чем никакой: он даёт ложное чувство безопасности.
Почему службу 1С нужно остановить, а не просто выгнать пользователей: рабочие процессы держат постоянные соединения с СУБД. Если перезапустить PostgreSQL под ними, процессы будут переподключаться, а регламентные задания упадут с ошибками.
Установка патча PostgreSQL внутри одной мажорной версии
Минорное обновление (например, 15.6 → 15.8) не меняет формат каталога данных. Бинарные файлы заменяются, данные остаются на месте, дамп и восстановление не нужны.
На Windows
- Остановите службу сервера 1С — «Агент сервера 1С:Предприятия 8.3». Команда в PowerShell от администратора:
Get-Service *1C*покажет точное имя, затемStop-Service "<имя>". - Остановите службу PostgreSQL:
Get-Service *postgres*, затемStop-Service. - Запустите инсталлятор новой сборки. Укажите тот же каталог установки и тот же каталог данных, что у старой версии. Порт оставьте прежним (по умолчанию 5432).
- После установки запустите службу PostgreSQL, затем службу 1С.
- Выполните
SELECT version();и убедитесь, что номер сменился.
Если инсталлятор предлагает только новый каталог и новый кластер — значит, вы скачали другую мажорную версию или сборку другого поставщика. Остановитесь и перепроверьте дистрибутив.
На Linux (Debian, Ubuntu)
При установке из репозитория поставщика сборки патч ставится штатным обновлением пакетов:
# узнать точные имена установленных пакетов
apt list --installed | grep -i postgres
# остановить сервер 1С (имя юнита зависит от версии платформы)
systemctl list-units | grep -i srv1cv8
sudo systemctl stop <имя юнита сервера 1С>
# обновить только пакеты PostgreSQL
sudo apt update
sudo apt install --only-upgrade <имена пакетов из первой команды>
sudo systemctl start <имя юнита сервера 1С>
Пакетный менеджер сам перезапустит службу PostgreSQL. На RPM-системах логика та же через dnf upgrade <пакеты>.
Если сборка ставилась из .deb или .rpm, скачанных вручную, установите новые файлы теми же командами: sudo dpkg -i *.deb или sudo dnf install ./*.rpm.
Закрепите пакеты PostgreSQL от случайного обновления из репозитория ОС: sudo apt-mark hold <пакеты>. Перед плановым патчем снимите закрепление (apt-mark unhold), после — верните. Это защищает от ситуации, когда автообновление ставит ванильный PostgreSQL поверх сборки для 1С.
Переход на новую мажорную версию PostgreSQL
Между мажорными версиями формат данных разный. Новый сервер старый каталог не прочитает. Вариантов два:
| Способ | Когда подходит | Простой | Риски |
|---|---|---|---|
pg_dump / pg_restore | Базы до нескольких десятков гигабайт, есть окно на ночь | Долгий: пропорционален объёму | Минимальные, старый кластер остаётся нетронутым |
pg_upgrade (копирование) | Крупные базы, нужен короткий простой | Средний | Нужен двойной объём диска |
pg_upgrade --link | Очень крупные базы, мало места | Минуты | После запуска нового кластера откат на старый невозможен |
Выгрузка/загрузка .dt | Переезд на другой сервер, мелкие базы | Самый долгий | Медленно на больших базах |
Порядок для pg_upgrade на Linux:
- Установите новую мажорную сборку для 1С рядом со старой. Обычно она создаёт свой кластер на порту 5433 — это нормально.
- Убедитесь, что в новой сборке есть те же расширения (запрос из раздела про совместимость).
- Остановите сервер 1С и оба кластера PostgreSQL.
- Запустите проверку от пользователя
postgres:
/путь/к/новой/bin/pg_upgrade \
-b /путь/к/старой/bin -B /путь/к/новой/bin \
-d /старый/каталог/данных -D /новый/каталог/данных \
--check
- Если проверка прошла, повторите команду без
--check. - Перенесите свои настройки из старого
postgresql.confиpg_hba.confвручную:pg_upgradeих не копирует. - Поменяйте порты местами (новый кластер — 5432), запустите его и сервер 1С.
- Соберите статистику, иначе первые часы 1С будет работать медленно:
vacuumdb -U postgres --all --analyze-in-stages.
Старый кластер не удаляйте, пока пользователи не отработают на новом хотя бы пару дней.
Настройка и проверка PostgreSQL после обновления
Сначала убедитесь, что расширения в базах соответствуют новым бинарникам. Сравните колонки default_version и installed_version из запроса выше. Если они расходятся, выполните в каждой базе 1С:
ALTER EXTENSION mchar UPDATE;
(и аналогично для остальных расширений из списка, если версия отличается).
Затем пройдитесь по параметрам postgresql.conf. Ориентиры для выделенного сервера под 1С:
| Параметр | Ориентир | Зачем |
|---|---|---|
shared_buffers | около 25% ОЗУ | Кэш страниц СУБД |
effective_cache_size | 50–75% ОЗУ | Подсказка планировщику о кэше ОС |
work_mem | 32–64 МБ | Сортировки и хеши в запросах 1С |
temp_buffers | 128–256 МБ | 1С активно использует временные таблицы |
max_locks_per_transaction | 256 и выше | Структура 1С — тысячи таблиц, при малом значении ловят ошибку нехватки разделяемой памяти |
online_analyze.enable | on | Статистика по временным таблицам |
Числа — стартовая точка. Точная настройка зависит от объёма ОЗУ, числа пользователей и того, делит ли PostgreSQL сервер с 1С.
Финальная проверка:
- Откройте каждую базу в режиме 1С:Предприятие под пользователем с полными правами.
- Сформируйте тяжёлый отчёт, который раньше выполнялся за известное время, и сравните.
- В консоли кластера 1С проверьте, что регламентные задания запускаются без ошибок.
- Посмотрите журнал PostgreSQL на предмет
ERRORиFATALза последний час.
Как автоматизировать установку патчей
Ставить патчи полностью без присмотра для СУБД под 1С не стоит: новая сборка должна выходить на сервер только после проверки на тестовом стенде. Автоматизировать имеет смысл рутину вокруг обновления.
Пример скрипта для Linux, который выполняет подготовку, обновление и проверку за один запуск:
#!/bin/bash
set -e
SRV1C="<имя юнита сервера 1С>"
PKGS="<пакеты PostgreSQL через пробел>"
BK=/backup/$(date +%F)
mkdir -p "$BK"
# 1. резервные копии всех баз, кроме служебных
for db in $(psql -U postgres -Atc "SELECT datname FROM pg_database WHERE datistemplate = false AND datname <> 'postgres'"); do
pg_dump -U postgres -Fc -f "$BK/$db.dump" "$db"
pg_restore -l "$BK/$db.dump" > /dev/null
done
pg_dumpall -U postgres --globals-only -f "$BK/globals.sql"
# 2. обновление
systemctl stop "$SRV1C"
apt-mark unhold $PKGS
apt-get update && apt-get install -y --only-upgrade $PKGS
apt-mark hold $PKGS
systemctl start "$SRV1C"
# 3. контроль
psql -U postgres -Atc "SELECT version();"
Строка с pg_restore -l прерывает скрипт, если дамп битый, и до обновления дело не дойдёт.
Что ещё стоит автоматизировать:
- 🔔 проверку выхода новых сборок — сравнение версии в репозитории с установленной (
apt list --upgradable) с уведомлением администратору; - 🧪 разворачивание ночного дампа на тестовом сервере и прогон обновления сначала там;
- 🚫 исключение пакетов PostgreSQL из
unattended-upgrades, если автообновление ОС включено.
На Windows ту же последовательность собирают в PowerShell: Stop-Service, pg_dump в цикле, тихая установка дистрибутива
, Start-Service. Ключи тихой установки у инсталляторов разных поставщиков отличаются — смотрите их в справке конкретного дистрибутива.
Ошибки при установке патча и что с ними делать
Перезапуск PostgreSQL ради смены параметров обрывает все сеансы 1С так же, как обновление. Делайте это вне рабочего времени или после предупреждения пользователей.