PostgreSQL под сервер 1С:Предприятия на Ubuntu: от пустой системы до первой базы
Содержание
Чтобы установить 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.
Ещё два пункта подготовки:
- Удалите штатный PostgreSQL, если его уже ставили:
sudo apt remove --purge postgresql*. Две разные сборки на одном порту 5432 не уживутся. - Проверьте свободное место. Под базу 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_buffers | 4GB (около 25% памяти) | кеш страниц данных самой СУБД |
effective_cache_size | 10GB | подсказка планировщику, сколько данных кеширует ОС |
work_mem | 64MB | память на сортировку в одном запросе |
maintenance_work_mem | 1GB | ускоряет VACUUM и построение индексов |
temp_buffers | 256MB | буфер временных таблиц, их у 1С много |
max_locks_per_transaction | 256 | запас для крупных проведений и обмена |
random_page_cost | 1.1 | для SSD; на HDD оставьте 4 |
max_connections | 500 | каждый рабочий процесс 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С тормозят через пару недель.
Применяются изменения перезапуском службы — с тем же предупреждением про сеансы, что выше.
Шаг 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 — частая причина отказа создать базу.
- Убедитесь, что пароль не содержит символов, которые требуют экранирования в строке подключения: на время диагностики задайте пароль из латиницы и цифр.