Как установить PostgreSQL 14 и 15 с патчами 1С на серверы Arch Linux и OpenSUSE Leap
Факт №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