PostgreSQL под сервер 1С:Предприятия на Ubuntu: от пустой системы до первой базы

· 10 мин

Содержание

Чтобы установить PostgreSQL для 1С на Ubuntu, нужна не обычная сборка из репозитория Ubuntu, а специальная: Postgres Pro для 1С или дистрибутив PostgreSQL, который фирма 1С выкладывает для своих партнёров. Перед установкой включите в системе локаль ru_RU.UTF-8, после — задайте пароль пользователю СУБД, откройте доступ в pg_hba.conf и подстройте память. Саму базу 1С создаёт сама, из консоли кластера.

Типичная ситуация: компания переезжает с файловой базы на клиент-серверный вариант, бюджета на MS SQL нет, под сервер выделили виртуалку с Ubuntu. Администратор ставит apt install postgresql, создаёт базу из консоли кластера и получает ошибку type "mchar" does not exist. Ниже — порядок, при котором этого не случится.

Почему для 1С нужна особая сборка PostgreSQL

1С:Предприятие использует в PostgreSQL собственные типы данных и расширения. Без них платформа просто не создаст структуру базы. В сборках для 1С уже есть:

  • 🧩 mchar и mvarchar — строковые типы, которые сравниваются без учёта регистра, как в MS SQL;
  • 🧩 fulleq — операторы сравнения для этих типов;
  • ⚙️ online_analyze — обновляет статистику по временным таблицам сразу после их заполнения;
  • ⚙️ plantuner — подсказки планировщику для пустых таблиц;
  • 🧩 fasttrun — быстрая очистка временных таблиц.

Источников две. Выбор зависит от того, что у вас уже есть.

СборкаГде взятьПлюсыМинусы
Postgres Pro для 1С (компания Postgres Professional)собственный репозиторий aptставится через apt, обновляется штатно, сама создаёт кластерсвоя раскладка каталогов, отличная от привычной
PostgreSQL от фирмы 1Сархив DEB-пакетов на сайте поддержки для пользователей с подпиской«родная» для платформыставится вручную через dpkg, бывают конфликты зависимостей на новых Ubuntu

Для новой установки на Ubuntu 22.04 или 24.04 проще взять Postgres Pro для 1С: меньше ручной работы с пакетами. Версию СУБД сверяйте со списком поддерживаемых в системных требованиях вашей версии платформы.

Шаг 1. Готовим Ubuntu: локаль, обновления, время

Начните с обновления пакетов и русской локали. Без ru_RU.UTF-8 кластер инициализируется с неправильной сортировкой, и потом это не исправить без пересоздания кластера.

sudo apt update && sudo apt upgrade -y
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8
locale -a | grep ru_RU

Последняя команда должна вывести ru_RU.utf8. Если пусто — установите пакет locales и повторите locale-gen.

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

sudo timedatectl set-timezone Europe/Moscow
timedatectl status

В выводе должно быть System clock synchronized: yes.

Ещё два пункта подготовки:

  1. Удалите штатный PostgreSQL, если его уже ставили: sudo apt remove --purge postgresql*. Две разные сборки на одном порту 5432 не уживутся.
  2. Проверьте свободное место. Под базу 1С закладывайте объём в 3–4 раза больше файла .1CD или выгрузки .dt: индексы и служебные таблицы в PostgreSQL занимают больше, чем в файловой базе.

Шаг 2. Ставим сервер PostgreSQL и клиентские утилиты

Вариант А: Postgres Pro для 1С через apt

На сайте Postgres Professional, в разделе загрузок сборок для 1С, есть скрипт подключения репозитория pgpro-repo-add.sh. Ссылка на него своя для каждой основной версии СУБД, поэтому копируйте её со страницы загрузки той версии, которую поддерживает ваша платформа.

curl -o pgpro-repo-add.sh <ссылка на скрипт со страницы загрузки>
sudo sh pgpro-repo-add.sh
sudo apt install postgrespro-1c-16

Цифра в имени пакета — основная версия СУБД. Пакет ставит сервер, клиент psql, инициализирует кластер и запускает службу. Проверка:

systemctl status postgrespro-1c-16
sudo -u postgres psql -c "SELECT version();"

В строке версии должно стоять упоминание сборки для 1С. Каталоги у Postgres Pro свои: программы лежат в /opt/pgpro/1c-16/bin, данные — в /var/lib/pgpro/1c-16/data. Конфигурационные файлы postgresql.conf и pg_hba.conf — в каталоге данных.

Если кластер создался с локалью не ru_RU.UTF-8 (такое бывает, когда локаль включили уже после установки), остановите службу, очистите каталог данных и переинициализируйте кластер утилитой pg-setup из каталога bin, указав нужную локаль. Справка по ключам: pg-setup --help. Делайте это только на пустом кластере, где ещё нет баз.

Вариант Б: сборка фирмы 1С из DEB-пакетов

Архив содержит набор .deb: сервер, клиент, библиотеку libpq5 и общие компоненты. Порядок такой:

sudo apt install postgresql-common
mkdir ~/pg1c && cd ~/pg1c
tar -xjf postgresql_*.tar.bz2   # имя архива — ваше
sudo dpkg -i *.deb
sudo apt -f install

apt -f install докачает недостающие зависимости. Если dpkg жалуется на версию libicu, значит, сборка рассчитана на другую версию Ubuntu: возьмите архив под свою систему или переходите на вариант А.

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

apt list --installed | grep 1C
sudo apt-mark hold <имена пакетов из вывода>

Кластер создаётся командой pg_createcluster с локалью ru_RU.UTF-8, запускается через pg_ctlcluster или systemctl.

Шаг 3. Пользователь СУБД и база для 1С

Сразу после установки у роли postgres нет пароля, а 1С подключается к СУБД именно по паролю. Задайте его:

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

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

CREATE ROLE usr1c WITH LOGIN SUPERUSER PASSWORD 'ДругойПароль_7k3';

Права суперпользователя здесь — обычная практика: при создании базы 1С подключает расширения и создаёт служебные объекты.

Базу создаёт сама 1С

Вручную через CREATE DATABASE базу для 1С делать не нужно. При добавлении информационной базы в консоли кластера или в окне запуска укажите:

  • Тип СУБД: PostgreSQL;
  • Сервер баз данных: localhost, если СУБД на той же машине, что и сервер 1С, или IP-адрес;
  • Имя базы данных: латиницей, например buh_2026;
  • Пользователь и пароль — те, что задали выше;
  • флажок «Создать базу данных в случае ее отсутствия».

1С создаст базу в кодировке UTF8 и развернёт структуру. Если базу всё же создают заранее (например, так требует регламент), делайте это от шаблона template0 с кодировкой UTF8 и русскими LC_COLLATE и LC_CTYPE, владельцем назначьте роль 1С.

Шаг 4. Доступ по сети: pg_hba.conf и listen_addresses

Если сервер 1С и PostgreSQL стоят на одной машине, менять почти ничего не надо: подключение к localhost по паролю разрешено по умолчанию. Это и самая быстрая схема — без сетевых задержек между сервером 1С и СУБД.

Если СУБД на отдельном сервере, правим два файла.

1. postgresql.conf — СУБД должна слушать сетевой интерфейс:

listen_addresses = '*'

2. pg_hba.conf — разрешаем подключение только с адреса сервера 1С:

# TYPE  DATABASE  USER   ADDRESS          METHOD
host    all       usr1c  192.168.10.15/32  scram-sha-256

Вместо 192.168.10.15 подставьте IP вашего сервера 1С. Не открывайте 0.0.0.0/0: СУБД с правами суперпользователя, доступная всему интернету, — прямой путь к взлому.

После правки pg_hba.conf достаточно перечитать конфигурацию, а после смены listen_addresses нужен перезапуск службы:

sudo systemctl restart postgrespro-1c-16

Перезапуск СУБД обрывает все сеансы 1С, работающие с базами на этом сервере. На рабочей системе делайте это вне рабочего времени, предупредив пользователей.

Если включён ufw, откройте порт 5432 только для сервера 1С:

sudo ufw allow from 192.168.10.15 to any port 5432 proto tcp

Шаг 5. Настройки памяти и планировщика под нагрузку 1С

Значения по умолчанию в postgresql.conf рассчитаны на скромное железо. 1С активно работает с временными таблицами и держит много блокировок, поэтому их стоит пересмотреть. Ниже — ориентиры для выделенного сервера СУБД с 16 ГБ памяти и SSD.

ПараметрОриентир для 16 ГБЗачем
shared_buffers4GB (около 25% памяти)кеш страниц данных самой СУБД
effective_cache_size10GBподсказка планировщику, сколько данных кеширует ОС
work_mem64MBпамять на сортировку в одном запросе
maintenance_work_mem1GBускоряет VACUUM и построение индексов
temp_buffers256MBбуфер временных таблиц, их у 1С много
max_locks_per_transaction256запас для крупных проведений и обмена
random_page_cost1.1для SSD; на HDD оставьте 4
max_connections500каждый рабочий процесс 1С держит несколько соединений

Проверьте, что подключены расширения 1С и включены совместимые с платформой настройки строк:

shared_preload_libraries = 'online_analyze, plantuner'
online_analyze.enable = on
plantuner.fix_empty_table = on
standard_conforming_strings = off
escape_string_warning = off

В сборках для 1С эти строки обычно уже стоят, но после ручной правки конфига их легко потерять.

Не ставьте fsync = off ради скорости. При сбое питания такая база разрушается без шансов на восстановление. Если запись — узкое место, компромисс — synchronous_commit = off: при аварии можно потерять последние доли секунды транзакций, но база останется целой.

work_mem выделяется на каждую операцию сортировки, а не на соединение. При 500 соединениях и тяжёлых отчётах 64 МБ легко превращаются в десятки гигабайт, поэтому на сервере с 8 ГБ берите 16–32 МБ. Автоочистку (autovacuum) не выключайте: без неё таблицы распухают, и запросы 1С тормозят через пару недель.

Применяются изменения перезапуском службы — с тем же предупреждением про сеансы, что выше.

Перед первым подключением базы 1С
Выполнено: 0 / 7

Шаг 6. Ошибки подключения и как их разобрать

Сначала проверьте СУБД без 1С. Так сразу видно, на чьей стороне проблема:

systemctl status postgrespro-1c-16
ss -tlnp | grep 5432
psql -h 192.168.10.20 -U usr1c -d postgres

Первая команда покажет, запущена ли служба. Вторая — на каком адресе слушает порт: 127.0.0.1:5432 вместо 0.0.0.0:5432 значит, что listen_addresses не применился. Третью выполните с сервера 1С: если psql подключается, а 1С нет, ищите причину в параметрах базы в консоли кластера.

Журнал СУБД — главный источник подсказок. Для Postgres Pro он в подкаталоге log каталога данных, для сборки 1С — в /var/log/postgresql/.

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

Если не помогло

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

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

Можно ли поставить PostgreSQL из стандартного репозитория Ubuntu?
Нет. В штатной сборке нет расширений mchar, mvarchar и fulleq, без которых 1С не создаёт структуру базы. Нужна Postgres Pro для 1С или сборка фирмы 1С.
Сколько баз 1С можно держать в одном кластере PostgreSQL?
Ограничения по числу нет: каждая информационная база — отдельная база данных в одном кластере. Упираться будете в память, диск и нагрузку, а не в лимит СУБД.
Ставить PostgreSQL на тот же сервер, что и сервер 1С, или на отдельный?
Для небольших и средних внедрений (до нескольких десятков пользователей) одна машина работает быстрее: нет сетевых задержек. Отдельный сервер СУБД оправдан, когда не хватает памяти или процессора на двоих.
Как делать резервную копию базы 1С на PostgreSQL?
Средствами СУБД: утилитой pg_dump в формате custom по расписанию через cron. Выгрузка .dt из Конфигуратора тоже работает, но требует монопольного доступа и на больших базах идёт долго.
Нужно ли платить за Postgres Pro для 1С?
Сборки для 1С Postgres Professional распространяет без оплаты для использования с 1С:Предприятием. Точные условия указаны в лицензионном соглашении на странице загрузки.