diamond АШ Tlg

Как установить PostgreSQL 14 и 15 с патчами 1С на серверы Arch Linux и OpenSUSE Leap

Пошаговое описание установки PostgreSQL от 1С для сервера приложений 1С:Предприятия. Актуальность: весна 2024.

Факт №1: для запуска 1С:Предприятия "ванильный" PostgreSQL не подойдёт.

Факт №2: несомненно, что для средних и крупных российских компаний в реалиях 2024 года в качестве СУБД наилучшим образом подойдёт Postges Pro Enterprise.

Существуют и другие версии PostgreSQL под разными соусами "импортозамещения", но все они вторичны. Также существует версия PostgreSQL от компании 1С - его происхождение мне неизвестно, скорее всего она выпускается в партнерстве c Postgres Pro, но лишена "фишек" Enterprise. Его-то мы и будем устанавливать, как самый доступный из совместимых с продуктами 1С. Область его применения - для малых компаний, для команд разработки, в тестовом контуре CI/CD.

На Arch и OpenSUSE проще всего установить Postresql-1C из исходников, для этого с ИТС нужно скачать файл с именем Патч СУБД PostgreSQL (tar.bz2). Далее предполагается, что вы уже установили сервер 1С по инструкции из предыдущей публикации и будете устанавливать Postresql-1C именно на него. Необходимым условием является наличие стандартных компиляторов и дебиановской утилиты dpkg, поэтому установим их на сервере:

// Arch Linux:
$ sudo pacman –Sy base-devel dpkg

// OpenSUSE Leap:
$ sudo zypper install -t devel_basis
$ sudo zypper install dpkg
// Для компиляции в OpenSUSE также потребуются библиотеки:
$ sudo zypper install libicu libicu-devel libreadline7 readline-devel

Скачиваем вышеуказанный файл с исходниками на своем рабочем компьютере и скопируем на сервер:

$ scp ./Patch_SUBD_PostgreSQL_14.4_1.1C.tar.bz2 user1@10.1.0.229:/home/user1

Заходим на сервер через ssh и убедимся что файл скопировался и находится в домашнем каталоге:

$ ls /home/user1
Patch_SUBD_PostgreSQL_14.4_1.1C.tar.bz2

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

#/bin/bash
patchZip=`ls Patch_SUBD_PostgreSQL*.tar.bz2`
rm -rvf src
mkdir -p patch
rm -rfv patch/*
tar -jxf ${patchZip} -C patch
patchDir=`ls -d patch/*`
dpkg-source -x ${patchDir}/*.dsc src
cd src
./configure CFLAGS='-march=native -mtune=native'
make world-bin -j$(nproc)
sudo make install-world-bin

На этом шаге все необходимые файлы PostgreSQL собраны, установлены и разложены по местам постоянной дислокации в папке /usr/local/pgsql. Дополнительное преимущество метода компиляции - мы сделали это с флагами оптимизации под нашу конкретную модель процессора на сервере, что может дать какие-то небольшие, но приятные проценты в производительности. Далее необходимо произвести настройки, чтобы всё это добро заработало.

Первым делом добавим папку с бинарниками в общий для всех пользователей PATH, чтобы не набирать в командах полный путь. Для этого редактируем файл /etc/profile

$ sudo nano /etc/profile

В случае Arch Linux находим следующее место и добавляем строку append_path '/usr/local/pgsql/bin':

# Append our default paths
append_path '/usr/local/sbin' 
append_path '/usr/local/bin' 
append_path '/usr/bin' 
append_path '/usr/local/pgsql/bin'

В случае OpenSUSE Leap просто добавляем в конец:

export PATH=/usr/local/pgsql/bin/:$PATH

Чтобы настройка подействовала нужно перезайти заново в систему. Далее нам нужно создать служебного пользователя postgres и проинициализировать новый кластер. Новый кластер для примера мы создадим в каталоге /var/pgsql

Лирическое отступление для новичков: авторы PostgreSQL отличаются особой оригинальностью при использовании терминологии (tuples, cluster, relation, class и т.д.), поэтому не нужно читать буквально - никакой кластер серверов вы сейчас не создаете, а только обычный INSTANCE в терминах Microsoft.

Крайне важно! Чтоб СУБД работала корректно требуется чтобы на сервере была настроена русская локаль ru_RU.UTF-8!

$ sudo useradd --create-home --user-group postgres
$ sudo chown postgres:postgres --recursive /usr/local/pgsql
$ sudo mkdir /var/pgsql
$ sudo chown postgres:postgres --recursive /var/pgsql

$ sudo -s
$ su - postgres
[postgres@s1 ~]$ initdb /var/pgsql/data      // В более старых версиях с ключиком: initdb -D /var/pgsql/data
[postgres@s1 ~]$ pg_ctl -D /var/pgsql/data -l logfile start

При запуске ошибка, ищем причину в журнале в файле /home/postgres/logfile:

FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock"

Для исправления нужно отредактировать postgresql.conf:

unix_socket_directories=/tmp

Запуск как служба: создать файл /usr/lib/systemd/system/postgresql.service со следующим содержимым (в 15 версии может создается автоматически при инициализации базы, а может и нет - нужно это проверить и подправить путь):

[Unit]
Description=PostgreSQL database server 
Documentation=man:postgres(1) 
 
[Service] 
#Type=notify 
User=postgres 
ExecStart=/usr/local/pgsql/bin/postgres -D /var/pgsql/data 
ExecReload=/bin/kill -HUP $MAINPID 
KillMode=mixed 
KillSignal=SIGINT 
TimeoutSec=infinity 
 
[Install] 
WantedBy=multi-user.target

Выполнить команды:

$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
$ systemctl status postgresql

Изменить пароль пользователя postgres по умолчанию:

$ sudo -u postgres psql -h /tmp
psql (14.4)
Type "help" for help.
    
postgres=# \password postgres

Заключение

Для качественной работы требуется выполнить настройки производительности в конфигурационном файле postgresq.conf, но это отдельная тема и не рассматривается в данной публикации.

Если вы сохранили скрипт компиляции, то в дальнейшем для обновления Postgres-1C достаточно будет запускать лишь его и затем перезапустить службу postgresql.service. Но следует помнить, что в отличии от MS SQL при смене номера релиза (например с 14 на 15) файлы баз данных Postgresql будут несовместимы, необходимо переносить данные в новую базу через резервную копию.

В качестве консоли управления рекомендую использовать DBeaver вместо прожорливого pgAdmin, который начиная с 4 версии отклонился в своём развитии куда-то не туда.

Связанные материалы

Как установить и запустить PostgresPro-1C версии 15 или 16 в контейнере podman

Как установить сервер 1С:Предприятия 8.3.22, 8.3.23, 8.3.24 на сервер Arch Linux

Как установить клиента 1С:Предприятия 8.3.22, 8.3.23 и 8.3.24 на Arch Linux