Установка Postgresql 10.4 на платформу ARM

by Anton Chernousov aka GITA-DEV


Опубликовано: 25 Май 2018 (последние правки 1 месяц, 2 недели)


Установка Postgresql 10.4 на платформу ARM

Собрать Postgresql 10.4 под платформу ARM я решил для того чтобы проверить одну свою идею по поводу логической репликации. Логическая репликация это новая фишка Postgresql 10-ой версии позволяющая реплицировать в Read only режиме отдельные таблицы на другой Postgresql server. Но вот правда одна незадача выяснилась, а именно под мою ARM-платформу собранных пакетов не нашлось.

Суть эксперимента состояла в том, чтобы проверить как работает логическая репликация между разными архитектурами. Если вам интересно, то механизмы полной репликации базы данных при помощи XLOG которые являются штатным механизмом полной Failover-репликации не работают не только на разных аппаратных платформах, но и на системах разной разрядности. У вас не получится настроить репликацию с 64-х битной версии Postgresql на 32-х битную, это кстати однажды стало для меня небольшим сюрпризом.

Создание базы данных Postgresql в ручном режиме

Как я уже сказал во вступлении к статье, собранных пакетов Postgresql 10.4 под платформу armhf не нашлось, но когда это останавливало то?

Сборка из исходных кодов простая и максимально типовая:

# wget https://ftp.postgresql.org/pub/source/v10.4/postgresql-10.4.tar.gz
# tar -xvf ./postgresql-10.4.tar.gz
# cd ./postgresql-10.4
# ./configure
# make && make install

Следующим этапом создадим пользователя Postgres, от его имени создаем базу и т.п.

Создаем пользователя postgres и от имени этого пользователя создаем пустую базу данных:

# useradd postgres
# passwd postgres
# su postgres
$ mkdir /var/lib/postgresql/data
$ /usr/local/pgsql/bin/initdb --pgdata=/var/lib/postgresql/data/ -E 'UTF-8' --lc-collate='ru_RU.UTF-8' --lc-ctype='ru_RU.UTF-8'

Проведем тестовый запуск базы данных при помощи команды (и конечно же тестовое подключение):

$ /usr/local/pgsql/bin/pg_ctl -D /var/lib/postgresql/data/ -l logfile start
$ /usr/local/pgsql/bin/psql
psql (10.4)
Type "help" for help.
postgres=# \

И закончим установку созданием сервиса SystemD для автоматического запуска базы данных (соберем его из штатного сервиса), для чего создайте файл /lib/systemd/system/postgresql-10.service следующего содержания:

[Unit]
Description=PostgreSQL 10 database server
After=syslog.target network.target

[Service]
Type=forking
TimeoutSec=120

User=postgres

Environment=PGDATA=/var/lib/postgresql/data/
PIDFILE=/var/lib/postgresql/data/postmaster.pid

ExecStart=/usr/local/pgsql/bin/pg_ctl start -w -D "/var/lib/postgresql/data/" -l "/var/lib/postgresql/data/pg_log/startup.log"
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -m fast -w -D "/var/lib/postgresql/data/"
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D "/var/lib/postgresql/data/"

[Install]
WantedBy=multi-user.target

Активируйте автозапуск сервиса и запустие его:

# systemctl enable postgresql-10
# systemctl start postgresql-1

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

# ln -s /usr/local/pgsql/bin/psql /usr/bin/psql
# ln -s /usr/local/pgsql/bin/pg_dump /usr/bin/pg_dump
# ln -s /usr/local/pgsql/bin/pg_dumpall /usr/bin/pg_dumpal

База готова к работе и мы можем переходить к эксперименту ради которго все и затевалось.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.