Разворачиваем информационную базу 1С:Предприятия на сервере PostgreSQL

· 10 мин

Содержание

Чтобы создать базу 1С на PostgreSQL, нужны три вещи: сборка PostgreSQL с патчами для 1С, установленный сервер 1С:Предприятия 8.3 и пользователь СУБД с правом создавать базы. Саму базу данных вручную в psql создавать не обязательно: в консоли кластера или в окне запуска 1С выбираете тип СУБД «PostgreSQL», указываете сервер, имя базы, логин и ставите флажок «Создать базу данных в случае ее отсутствия». Платформа сама создаст базу на сервере PostgreSQL и таблицы в ней.

Типичная ситуация: компания переросла файловый вариант, 15 пользователей висят на блокировках, а лицензия MS SQL стоит заметных денег. Переход на клиент-серверный вариант с PostgreSQL решает обе задачи. Ниже пошаговая инструкция от установки сервера до первого входа в базу, с настройкой и переносом данных.

1. Что подготовить: железо, ОС и подходящая сборка PostgreSQL

Обычный PostgreSQL из репозитория дистрибутива для 1С не подходит. Платформе нужны дополнительные расширения: тип mchar (строки без учёта регистра, как в MS SQL), fulleq и ряд доработок планировщика. Без них база либо не создастся, либо будет работать заметно медленнее.

Где взять подходящую сборку:

  • 🐘 PostgreSQL от фирмы 1С — дистрибутивы лежат на портале обновлений рядом с платформой, доступны при действующей подписке.
  • 🐘 Postgres Pro для 1С — бесплатная сборка компании Postgres Professional, ставится из её репозитория.
  • 🐘 Postgres Pro Standard / Enterprise — коммерческие редакции с поддержкой, когда нужен сертифицированный продукт.

Версию PostgreSQL подбирайте под версию платформы. Перед установкой откройте список поддерживаемых СУБД в описании вашего релиза платформы: новые мажорные версии PostgreSQL платформа поддерживает не сразу. Безопасный путь — взять ту мажорную версию, которую сборщик выпускает именно «для 1С», и платформу не ниже указанной в требованиях.

Ориентиры по серверу для небольшой и средней компании:

НагрузкаПользователейCPURAMДиск
Малаядо 104 ядра8–16 ГБSSD от 100 ГБ
Средняя10–508 ядер32 ГБNVMe, отдельно данные и WAL
Крупная50+16+ ядер64 ГБ и большеNVMe RAID 10

Цифры примерные: всё зависит от конфигурации и размера базы. ЗУП на 200 человек и ERP на 5 млн документов — разные миры.

💡 PostgreSQL и сервер 1С можно держать на одной машине — так проще и быстрее для малых нагрузок. Разносить их по разным серверам имеет смысл, когда база и пользователи растут. ОС может быть любой из поддерживаемых: Linux (Debian, Ubuntu, РЕД ОС, Astra и др.) или Windows Server 2016 и новее.

2. Установка PostgreSQL для 1С на Linux и Windows

Разберём установку на примере Postgres Pro для 1С версии 14 на Ubuntu или Debian. Для другой мажорной версии меняется только число в адресе и имени пакета.

Шаг 1. Русская локаль

1С требует, чтобы кластер PostgreSQL был инициализирован с локалью ru_RU.UTF-8. Сгенерируйте её до установки СУБД:

sudo locale-gen ru_RU.UTF-8
sudo update-locale
locale -a | grep ru_RU

Если последняя команда ничего не вывела, локаль не создана, и инициализация кластера закончится ошибкой.

Шаг 2. Репозиторий и пакет

wget https://repo.postgrespro.ru/1c/1c-14/keys/pgpro-repo-add.sh
sudo sh pgpro-repo-add.sh
sudo apt install postgrespro-1c-14

Программы встанут в /opt/pgpro/1c-14/bin. Точный адрес скрипта для нужной версии сверяйте на сайте Postgres Professional: структура репозитория у разных версий своя.

Шаг 3. Инициализация кластера с профилем 1С

sudo /opt/pgpro/1c-14/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8
sudo /opt/pgpro/1c-14/bin/pg-setup service enable
sudo /opt/pgpro/1c-14/bin/pg-setup service start

Ключ --tune=1c сразу выставляет набор параметров, рекомендованных для 1С. Ручную донастройку разберём в разделе 4.

На Windows

Запустите установщик сборки для 1С, на шаге параметров кластера выберите локаль Russian, Russia и кодировку UTF8, задайте пароль пользователя postgres и порт (по умолчанию 5432). После установки проверьте, что служба PostgreSQL запущена и стоит в автозапуске.

Если на сервере уже работает другой экземпляр PostgreSQL, новый займёт порт 5433 или следующий свободный. Это пригодится при подключении: порт тогда указывается явно.

3. Пользователь СУБД и доступ с сервера 1С

Пароль и отдельная роль

Сначала задайте пароль служебному пользователю postgres:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'СложныйПароль';"

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

CREATE ROLE usr1c WITH LOGIN SUPERUSER PASSWORD 'ДругойСложныйПароль';

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

Разрешить подключение по сети

Если сервер 1С и PostgreSQL стоят на разных машинах, нужно открыть две вещи.

  1. В postgresql.conf параметр listen_addresses:
listen_addresses = '*'
  1. В pg_hba.conf строку для адреса сервера 1С (пример для 10.0.0.5):
# TYPE  DATABASE  USER   ADDRESS        METHOD
host    all       usr1c  10.0.0.5/32    md5

Метод md5 понимают все версии платформы. scram-sha-256 надёжнее, но требует свежей платформы, поэтому проверьте поддержку в описании релиза, прежде чем переходить на него.

  1. Перечитайте настройки. Изменение pg_hba.conf применяется перезагрузкой конфигурации, а listen_addresses — только перезапуском службы:
sudo /opt/pgpro/1c-14/bin/pg-setup service restart

Перезапуск службы PostgreSQL обрывает все подключения к базам. На рабочем сервере делайте это вне рабочего времени, предупредив пользователей.

На сервере не забудьте открыть порт 5432 в файрволе, но только для адреса сервера 1С, а не для всей сети.

4. Параметры postgresql.conf, которые реально влияют на скорость 1С

Профиль --tune=1c даёт разумный старт. Дальше параметры подгоняют под объём памяти. Пример для выделенного сервера СУБД с 32 ГБ RAM и SSD:

ПараметрЗначениеЗачем
shared_buffers8GB≈25% RAM, кэш страниц самого PostgreSQL
effective_cache_size22GB≈70% RAM, подсказка планировщику о кэше ОС
work_mem64MBпамять на сортировку в одном запросе
maintenance_work_mem1GBускоряет VACUUM и построение индексов
temp_buffers128MB1С активно пользуется временными таблицами
max_connections500у 1С много соединений на рабочие процессы
max_locks_per_transaction256спасает от out of shared memory
random_page_cost1.1для SSD/NVMe вместо значения по умолчанию 4
from_collapse_limit, join_collapse_limit20запросы 1С соединяют много таблиц
standard_conforming_stringsoffожидаемое платформой поведение строк
escape_string_warningoffубирает лишние предупреждения в логе

Если сервер 1С стоит на той же машине, урежьте shared_buffers и effective_cache_size: рабочим процессам 1С тоже нужна память.

work_mem выделяется на каждую операцию сортировки, а не на соединение. При 300 одновременных тяжёлых запросах 64 МБ превращаются в 19 ГБ. Не задирайте его до сотен мегабайт «на всякий случай».

synchronous_commit = off и тем более fsync = off ускоряют запись, но при сбое питания вы теряете последние транзакции или всю базу. Не выключайте fsync на рабочей базе. synchronous_commit = off допустим только при осознанном риске потерять несколько секунд работы.

В сборках для 1С есть свои параметры, например online_analyze.enable и plantuner.fix_empty_table. Их значения уже выставляет профиль 1С, без замеров их лучше не трогать.

5. Создание информационной базы 1С на сервере PostgreSQL

Сервер 1С:Предприятия к этому моменту должен быть установлен и запущен. Проверьте, что агент сервера слушает порт 1540.

Вариант А: через консоль администрирования кластера

  1. Откройте Администрирование серверов 1С Предприятия, добавьте центральный сервер, если его ещё нет.
  2. Раскройте кластер, правой кнопкой по Информационные базы → Создать → Информационная база.
  3. Заполните поля:
    • Имя — имя базы в кластере, по нему подключаются клиенты, например buh;
    • Защищённое соединение — «выключено», если не настраивали TLS;
    • Сервер баз данных — адрес PostgreSQL: localhost, 10.0.0.10 или с портом: 10.0.0.10 port=5433;
    • Тип СУБД — PostgreSQL;
    • База данных — имя базы в PostgreSQL, латиницей в нижнем регистре, например buh;
    • Пользователь сервера БД и Пароль — роль из раздела 3;
    • Смещение дат — 0 (смещение 2000 нужно для MS SQL);
    • Разрешить выдачу лицензий сервером 1С:Предприятия — по вашей схеме лицензирования;
    • Создать базу данных в случае ее отсутствия — включить;
    • Установить блокировку регламентных заданий — включить, если это копия рабочей базы.
  4. Нажмите OK. Через несколько секунд база появится в списке, а в PostgreSQL — новая база данных.

Вариант Б: прямо из окна запуска 1С

  1. В окне запуска нажмите Добавить → Создание новой информационной базы.
  2. Выберите: из шаблона (типовая конфигурация) или пустую базу.
  3. Вариант расположения — На сервере 1С:Предприятия.
  4. Заполните кластер серверов (имя сервера 1С), имя базы и те же параметры СУБД, что в варианте А.
  5. Поставьте флажок Создать базу данных в случае ее отсутствия и завершите мастер.

💡 Имя базы в кластере и имя базы в PostgreSQL могут различаться, но одинаковые имена сильно упрощают поддержку: сразу видно, какая база данных к какой информационной базе относится.

Диагностика: выберите симптом

6. Перенос рабочей базы с MS SQL или файлового варианта

Прямой перенос «таблица в таблицу» между СУБД для 1С не нужен. Платформа сама переливает данные через файл выгрузки .dt.

  1. Предупредите пользователей и выгоните их из базы: для выгрузки нужен монопольный доступ.
  2. В Конфигураторе старой базы: Администрирование → Выгрузить информационную базу → сохраните файл .dt.
  3. Создайте пустую базу на PostgreSQL по разделу 5.
  4. Откройте новую базу в Конфигураторе: Администрирование → Загрузить информационную базу → выберите файл .dt.
  5. После загрузки запустите Администрирование → Тестирование и исправление с режимом только проверки и убедитесь, что ошибок нет.
  6. Откройте базу в пользовательском режиме и сверьте контрольные цифры: остатки по ключевым счетам, оборотно-сальдовую ведомость за последний месяц, количество документов.

Для больших баз удобнее серверная утилита ibcmd с командами выгрузки и загрузки: она работает без клиента и не упирается в ограничения оконного Конфигуратора. Синтаксис смотрите в ibcmd help для вашей версии платформы.

Что может «вылезти» после переезда:

  • ⚙️ Прямые запросы к СУБД во внешних обработках, отчётах BI или интеграциях написаны на T-SQL — их придётся переписать.
  • ⚙️ Тяжёлые отчёты могут вести себя иначе: у PostgreSQL свой планировщик. Первые дни следите за медленными запросами.
  • ⚙️ Регламентные задания в скопированной базе стартуют сами, если не стоит блокировка: обмены и рассылки уйдут в работу из тестовой копии.

Старую базу на MS SQL не удаляйте первые две-три недели. Если что-то пойдёт не так, откат займёт минуты, а не сутки.

7. Обслуживание базы 1С на PostgreSQL: бэкапы, VACUUM, мониторинг

Резервные копии

Выгрузка .dt — не замена бэкапа: она медленная и требует монопольного доступа. Основной инструмент — pg_dump в сжатом формате:

/opt/pgpro/1c-14/bin/pg_dump -U postgres -Fc -f /backup/buh_$(date +%F).dump buh

Восстановление — pg_restore в пустую базу. Для крупных баз и точки восстановления на любой момент времени подключают непрерывное архивирование WAL или специализированные утилиты вроде pg_probackup.

Раз в месяц проверяйте, что бэкап реально разворачивается: восстановите его в тестовую базу и откройте в 1С.

VACUUM и статистика

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

/opt/pgpro/1c-14/bin/vacuumdb -U postgres --all --analyze

Эта команда не блокирует работу пользователей. VACUUM FULL и REINDEX без параметра CONCURRENTLY блокируют таблицы, их запускают только в окно обслуживания.

Мониторинг

Что смотретьКак
Активные запросы и зависшие транзакциипредставление pg_stat_activity
Медленные запросыlog_min_duration_statement = 5000 (мс) в postgresql.conf
Рост базыSELECT pg_size_pretty(pg_database_size('buh'));
Место на дискесвободно не меньше размера самой большой базы, иначе не поместится бэкап
Ожидания на блокировкахpg_locks вместе с pg_stat_activity
Регламент обслуживания базы 1С на PostgreSQL
Выполнено: 0 / 6

Частые вопросы

Можно ли подключить к PostgreSQL файловую базу 1С без сервера 1С?
Нет. Работа с СУБД возможна только через сервер 1С:Предприятия. Файловую базу сначала выгружают в .dt и загружают в клиент-серверную.
Нужна ли отдельная лицензия на PostgreSQL?
Нет, PostgreSQL и бесплатная сборка Postgres Pro для 1С распространяются без лицензионных платежей. Лицензия нужна на сервер 1С:Предприятия и клиентские места.
Сколько баз можно разместить на одном сервере PostgreSQL?
Технических ограничений на число баз нет, упираются в память, диск и нагрузку. Десяток небольших баз на одном сервере — нормальная практика.
Почему 1С на PostgreSQL работает медленнее, чем на MS SQL?
Чаще всего из-за настроек по умолчанию: маленькие shared_buffers и work_mem, random_page_cost для HDD на SSD, отключённый autovacuum. После настройки по таблице параметров разница для типовых конфигураций обычно незаметна.
Можно ли сменить пароль пользователя СУБД после создания базы?
Да. Смените пароль роли в PostgreSQL и сразу укажите новый в свойствах каждой информационной базы в консоли кластера, иначе пользователи не войдут.