Пост

Установка PostgreSQL из исходников, и запуск двух версий на одном сервере в Centos 8

PostgreSQL — свободная объектно-реляционная система управления базами данных, наиболее развитая из открытых СУБД и являющаяся реальной альтернативой коммерческим базам данных. PostgreSQL базируется на языке SQL.

Подготовка

Устанавливаем необходимые пакеты

1
$ sudo dnf -y install gcc make readline-devel zlib-devel systemd-devel

Создаем системного пользователя postgres

1
$ sudo useradd -M -s -d /var/lib/postgresql postgres

Создаем каталог для логов PostgreSQL и назначаем права

1
2
$ sudo mkdir /var/log/postgresql
$ sudo chown -R postgres:postgres /var/log/postgresql

Установка PostgreSQL 9.6 из исходников, запуск на порту 5433

Скачиваем архив PostgreSQL 9.6 в каталог /tmp и разархивируем его

1
2
3
4
$ wget https://ftp.postgresql.org/pub/source/v9.6.19/postgresql-9.6.19.tar.gz -P /tmp
$ cd /tmp
$ tar xzf postgresql-9.6.19.tar.gz
$ cd postgresql-9.6.19

Запускаем конфигурирование PostgreSQL 9.6

1
$ sudo ./configure --with-systemd --prefix=/opt/postgresql/9.6

Устанавливаем PostgreSQL 9.6

1
2
$ sudo make
$ sudo make install

Создаем каталог для базы PostgreSQL 9.6 и назначаем права

1
2
$ sudo mkdir -p /var/lib/postgresql/9.6/main
$ sudo chown -R postgres:postgres /var/lib/postgresql

Переключаемся на пользователя postgres

1
$ sudo su - postgres

Инициализируем базу и закрываем сессию пользователя postgres

1
2
$ /opt/postgresql/9.6/bin/initdb -D /var/lib/postgresql/9.6/main
$ exit

Редактируем конфиг PostgreSQL 9.6, меняем дефолтный порт на 5433

1
2
3
4
$ sudo nano /var/lib/postgresql/9.6/main/postgresql.conf
[...]
listen_addresses = '*'
port = 5433

Запускаем PostgreSQL 9.6

1
$ sudo su - postgres -c "/opt/postgresql/9.6/bin/pg_ctl -D /var/lib/postgresql/9.6/main/ -l /var/log/postgresql/postgresql-9.6.log start"

Проверяем, доступен ли порт 5433

1
2
3
$ ss -nltup | grep 5433
tcp     LISTEN   0        128              0.0.0.0:5433          0.0.0.0:*
tcp     LISTEN   0        128                 [::]:5433             [::]:*

Проверяем подключение к СУБД

1
2
3
$ sudo su - postgres
$ export PGPORT=5433
$ /opt/postgresql/9.6/bin/psql

Смотрим версию

1
2
=# SELECT version();
 PostgreSQL 9.6.19 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit

Выходим

1
2
=# \q
$ exit

Останавливаем PostgreSQL 9.6

1
$ sudo su - postgres -c "/opt/postgresql/9.6/bin/pg_ctl -D /var/lib/postgresql/9.6/main/ stop"

Для удобства запуска сервиса создадим Systemd Unit для Postgresql 9.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo nano /etc/systemd/system/postgresql-9.6.service
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Type=notify

User=postgres
Group=postgres

# Location of database directory
Environment=PGDATA=/var/lib/postgresql/9.6/main/

ExecStart=/opt/postgresql/9.6/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT

TimeoutSec=0

[Install]
WantedBy=multi-user.target

Добавляем сервис в автозагрузку и проверяем статус

1
2
3
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now postgresql-9.6
$ systemctl status postgresql-9.6

Открываем порт 5433 в Firewalld

1
2
$ sudo firewall-cmd --permanent --zone=public --add-port=5433/tcp
$ sudo firewall-cmd --reload

Установка PostgreSQL 11 из исходников, запуск на порту 5432

Скачиваем архив PostgreSQL 11 в каталог /tmp и разархивируем его

1
2
3
4
$ wget https://ftp.postgresql.org/pub/source/v11.7/postgresql-11.7.tar.gz -P /tmp
$ cd /tmp
$ tar xzf postgresql-11.7.tar.gz
$ cd postgresql-11.7

Запускаем конфигурирование PostgreSQL 11

1
$ sudo ./configure --with-systemd --prefix=/opt/postgresql/11

Устанавливаем PostgreSQL 11

1
2
$ sudo make
$ sudo make install

Создаем каталог для базы PostgreSQL 11 и назначаем права

1
2
$ sudo mkdir -p /var/lib/postgresql/11/main
$ sudo chown -R postgres:postgres /var/lib/postgresql

Переключаемся на пользователя postgres

1
$ sudo su - postgres

Инициализируем базу и закрываем сессию пользователя postgres

1
2
$ /opt/postgresql/11/bin/initdb -D /var/lib/postgresql/11/main
$ exit

Редактируем конфиг PostgreSQL 11

1
2
3
4
$ sudo nano /var/lib/postgresql/11/main/postgresql.conf
[…]
listen_addresses = '*'
port = 5432

Запускаем PostgreSQL 11

1
$ sudo su - postgres -c "/opt/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main/ -l /var/log/postgresql/postgresql-11.log start"

Проверяем, доступен ли порт 5432

1
2
3
$ ss -nltup | grep 5432
tcp     LISTEN   0        128              0.0.0.0:5432          0.0.0.0:*
tcp     LISTEN   0        128                 [::]:5432             [::]:*

Проверяем подключение к СУБД

1
2
$ sudo su - postgres
$ /opt/postgresql/11/bin/psql

Смотрим версию

1
2
=# SELECT version();
PostgreSQL 11.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit

Выходим

1
2
=# \q
$ exit

Останавливаем PostgreSQL 11

1
$ sudo su - postgres -c "/opt/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main/ stop"

Для удобства запуска сервиса создадим Systemd Unit для Postgresql 11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo nano /etc/systemd/system/postgresql-11.service
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Type=notify

User=postgres
Group=postgres

# Location of database directory
Environment=PGDATA=/var/lib/postgresql/11/main/

ExecStart=/opt/postgresql/11/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT

TimeoutSec=0

[Install]
WantedBy=multi-user.target

Добавляем сервис в автозагрузку и провряем статус

1
2
3
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now postgresql-11
$ systemctl status postgresql-11

Открываем порт 5432 в Firewalld

1
2
$ sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
$ sudo firewall-cmd --reload
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.