Перейти к содержанию

SELTA/selta-pg-setup

Материал из Etersoft wiki


selta-pg-setup — настройка сервера PostgreSQL для SELTA

selta-pg-setup — скрипт из пакета selta-server для Linux. Он настраивает установленный PostgreSQL для SELTA@Etersoft, создаёт базы со схемой SELTA и обновляет схему. Версия пакета совпадает с версией SELTA (1.1.6 — схема 116); схема берётся из /usr/share/selta-server/sql. Исходный код: etersoft/selta-server.

Запускается от root. С базами скрипт работает от пользователя postgres через локальный сокет, поэтому пароль ему не нужен.

Быстрый старт

# selta-pg-setup init --allow 192.168.1.0/24     # сервер, настройки, доступ из сети, база master
# selta-pg-setup create-db buh                   # база для 1С со схемой SELTA
# selta-pg-setup status                          # проверка

После этого в Конфигураторе 1С в параметрах SQL укажите сервер (имя или адрес машины с PostgreSQL), базу buh, пользователя postgres и его пароль (см. Подключение 1С:Предприятия).

Команды

Команда Что делает
init Создаёт кластер, если его нет, настраивает сервер, включает и перезапускает службу, создаёт базу master. Повторный запуск безопасен.
create-db ИМЯ... Создаёт базы (UTF8, локаль кластера) и ставит в них схему SELTA. Отказывает, если база уже есть.
install-db ИМЯ... Ставит схему SELTA в уже созданные пустые базы. Отказывает, если в базе уже есть SELTA.
upgrade [ИМЯ...] Обновляет схему SELTA до версии пакета во всех базах SELTA, включая master (или в указанных). Цепочка скриптов 8308selta_up_* выполняется одной транзакцией на базу: при ошибке база остаётся прежней.
status Показывает найденный сервер, настройки, версию mchar и версии SELTA в базах. Код возврата не 0, если настройки не подходят или базы нужно обновить.

Параметры

Параметр Значение
--allow СЕТЬ Сеть клиентов для pg_hba.conf, например 192.168.1.0/24 или 10.0.0.5/32. Можно указать несколько раз.
--auth МЕТОД Проверка пароля для --allow: scram-sha-256 (по умолчанию) или md5. SELTA с версии 1.1.4 умеет оба.
--listen АДРЕСА listen_addresses, по умолчанию *.
--locale ЛОКАЛЬ Локаль нового кластера и баз. По умолчанию ru_RU.UTF-8, если её нет — C.UTF-8, иначе C.
--password-file ФАЙЛ Пароль пользователя postgres (первая строка файла).

Пароль postgres нужен для входа 1С по сети. Он задаётся, когда скрипт создаёт новый кластер или когда у существующего кластера пароля нет, а указан --allow (так создают кластер пакеты Debian и RH). Пароль берётся из --password-file, спрашивается на терминале, а без терминала создаётся случайный и записывается в /root/selta-postgres.password (права 600).

Что делает init

  1. Находит установленный PostgreSQL (см. ниже). Если его нет — сообщает, что поставить.
  2. Если кластера нет — создаёт его: UTF8, выбранная локаль, контрольные суммы страниц, локальный вход peer, сетевой — с паролем. На Debian/Astra/Ubuntu — через pg_createcluster.
  3. Дописывает в pg_hba.conf блок между строками # BEGIN selta-pg-setup и # END selta-pg-setup с сетями --allow. При повторном запуске блок заменяется, а не дублируется; остальное в файле не трогается.
  4. Включает автозапуск службы и запускает сервер. Без systemd (например, в контейнере) использует pg_ctl или pg_ctlcluster.
  5. Через ALTER SYSTEM (файл postgresql.auto.conf) задаёт:
    • listen_addresses;
    • shared_preload_libraries — добавляет к уже заданным установленные модули из списка mchar, fasttrun, fulleq, online_analyze, plantuner;
    • standard_conforming_strings = off, escape_string_warning = off, client_min_messages = error;
    • online_analyze.verbose = off, если модуль online_analyze есть.
  6. Перезапускает сервер и проверяет настройки, наличие mchar и версию PostgreSQL (не ниже 10).
  7. Создаёт базу master со схемой SELTA.

Типы mchar/mvarchar в новых базах создаются CREATE EXTENSION mchar. Если расширения нет, а библиотека mchar есть (старые сборки), — скриптом 8308mchar.sql.

Какой PostgreSQL находит скрипт

Раскладка Программы Данные Служба
Postgres Pro для 1С /opt/pgpro/1c-N/bin /var/lib/pgpro/1c-N/data postgrespro-1c-N
Debian, Astra Linux, Ubuntu /usr/lib/postgresql/N/bin кластер N/main, настройки в /etc/postgresql/N/main postgresql@N-main
PGDG и сборки в /usr/pgsql-N /usr/pgsql-N/bin /var/lib/pgsql/N/data postgresql-N
RH-подобные (РЕД ОС, Rocky, РОСА…) /usr/bin /var/lib/pgsql/data postgresql
ALT Linux /usr/bin из /etc/sysconfig/postgresql (по умолчанию /var/lib/pgsql/data) postgresql

Поиск идёт в этом порядке; из нескольких версий берётся старшая. Порт берётся из настроек кластера (по умолчанию 5432). Переопределить можно переменными окружения SELTA_PGBIN, SELTA_PGDATA, SELTA_PGPORT, SELTA_SERVICE, например:

# SELTA_PGBIN=/usr/lib/postgresql/16/bin SELTA_PGDATA=/srv/pg16 SELTA_PGPORT=5433 selta-pg-setup status

Проверены: ALT p8, p9, c9f2, p10, c10f2, p11, Sisyphus (PostgreSQL для 1С 11–18), Debian 12, Ubuntu 24.04, Rocky Linux 9 (PostgreSQL дистрибутива с postgresql-mchar). Раскладки PGDG и Postgres Pro для 1С пока проверены только по описанию.

Пример вывода status

# selta-pg-setup status
server:   PostgreSQL 15.18 on x86_64-alt-linux-gnu, ...
layout:   alt, /usr/bin, service postgresql
data:     /var/lib/pgsql/data, port 5432
listen:   *
preload:  mchar, fasttrun, fulleq, online_analyze, plantuner
standard_conforming_strings: off
client_min_messages: error
mchar:    2.2.1
package:  SELTA schema 116
databases:
  buh: SELTA 116
  master: SELTA 116

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

При обновлении selta-server пакет подсказывает выполнить:

# selta-pg-setup upgrade

Подробнее — Обновление SELTA с прошлой версии.

Частые ошибки

  • no PostgreSQL server found — сервер не установлен. На ALT поставьте selta-server (он тянет PostgreSQL для 1С), на других системах — postgresql-mchar или PostgreSQL для 1С.
  • the mchar module is not installed — у сервера нет mchar: поставьте postgresql-mchar для этой версии PostgreSQL или используйте PostgreSQL для 1С.
  • PostgreSQL does not accept connections — сервер не поднялся; смотрите журнал службы (journalctl -u СЛУЖБА) или pgstartup.log в каталоге данных.
  • 1С не подключается по сети — проверьте, что сеть клиента указана в --allow, порт 5432 открыт в межсетевом экране и у postgres есть пароль.