# Обновление кластера

## Обновление контрольных сумм

1. Возвращаемся в исходное состояние. Отключаем контрольные суммы на сервере 5432 и меняем параметр min_wal_size

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 stop
waiting for server to shut down.... done
server stopped
```

```bash
postgres$ pg_checksums -D /var/lib/pgsql/12/main5432 -d
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums disabled in cluster

postgres$ echo "min_wal_size=500MB" >> /var/lib/pgsql/12/main5432/postgresql.conf

postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 start
waiting for server to start....2021-04-15 05:48:32.356 UTC [2630] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-15 05:48:32.356 UTC [2630] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-04-15 05:48:32.360 UTC [2630] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-04-15 05:48:32.368 UTC [2630] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2021-04-15 05:48:32.387 UTC [2630] LOG:  redirecting log output to logging collector process
2021-04-15 05:48:32.387 UTC [2630] HINT:  Future log output will appear in directory "log".
 done
server started
```

2. Удаляем кластер на порту 5433

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 stop
waiting for server to shut down.... done
server stopped
```

```bash
postgres$ rm -rf /var/lib/pgsql/12/main5433
```

3. Заново инициализируем кластер на порту 5433 с выключенными контрольными суммами, меняем порт и запускаем его

```bash
postgres$ pg_basebackup -D /var/lib/pgsql/12/main5433 -R -v
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/4000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_2670"
pg_basebackup: write-ahead log end point: 0/4000138
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed
```

```bash
postgres$ echo "port=5433" >> /var/lib/pgsql/12/main5433/postgresql.conf
```

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 start
waiting for server to start....2021-04-15 05:51:27.190 UTC [2690] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-15 05:51:27.190 UTC [2690] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-15 05:51:27.193 UTC [2690] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-15 05:51:27.200 UTC [2690] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-15 05:51:27.218 UTC [2690] LOG:  redirecting log output to logging collector process
2021-04-15 05:51:27.218 UTC [2690] HINT:  Future log output will appear in directory "log".
 done
server started
```

4. Проверяем, что репликация запущена

```bash
postgres$ psql
psql (12.6)
Type "help" for help.

5432=> \x
Expanded display is on.
5432=> select * from pg_stat_replication ;
-[ RECORD 1 ]----+------------------------------
pid              | 2697
usesysid         | 10
usename          | postgres
application_name | walreceiver
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2021-04-15 05:51:27.338752+00
backend_xmin     |
state            | streaming
sent_lsn         | 0/5000060
write_lsn        | 0/5000060
flush_lsn        | 0/5000060
replay_lsn       | 0/5000060
write_lag        | 00:00:00.0837
flush_lag        | 00:00:00.084988
replay_lag       | 00:00:00.085032
sync_priority    | 0
sync_state       | async
reply_time       | 2021-04-15 05:51:27.42534+00

5432=> \q
```

5. Проверяем, что контрольные суммы на кластере 5433 выключены

```bash
postgres$ psql -p5433
psql (12.6)
Type "help" for help.

5433=> \x
Expanded display is on.

5433=> select * from pg_settings where name ='data_checksums';
-[ RECORD 1 ]---+-------------------------------------------------------------
name            | data_checksums
setting         | off
unit            |
category        | Preset Options
short_desc      | Shows whether data checksums are turned on for this cluster.
extra_desc      |
context         | internal
vartype         | bool
source          | override
min_val         |
max_val         |
enumvals        |
boot_val        | off
reset_val       | off
sourcefile      |
sourceline      |
pending_restart | f

5433=> \q
```

6. Останавливаем реплику, включаем контрольные суммы на ней

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 stop
waiting for server to shut down.... done
server stopped

postgres$ pg_checksums -D /var/lib/pgsql/12/main5433 -e
Checksum operation completed
Files scanned:  1570
Blocks scanned: 5127
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster
```

7. Запускаем кластер на порту 5433

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 start
waiting for server to start....2021-04-15 05:52:48.870 UTC [2716] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-15 05:52:48.870 UTC [2716] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-15 05:52:48.874 UTC [2716] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-15 05:52:48.886 UTC [2716] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-15 05:52:48.903 UTC [2716] LOG:  redirecting log output to logging collector process
2021-04-15 05:52:48.903 UTC [2716] HINT:  Future log output will appear in directory "log".
 done
server started
```

8. Проверяем, что на реплике включены контрольные суммы и к ней приходят изменения

```bash
postgres$ psql -p5433
psql (12.6)
Type "help" for help.

5433=> \x
Expanded display is on.

5433=> select * from pg_settings where name ='data_checksums';
-[ RECORD 1 ]---+-------------------------------------------------------------
name            | data_checksums
setting         | on
unit            |
category        | Preset Options
short_desc      | Shows whether data checksums are turned on for this cluster.
extra_desc      |
context         | internal
vartype         | bool
source          | override
min_val         |
max_val         |
enumvals        |
boot_val        | off
reset_val       | on
sourcefile      |
sourceline      |
pending_restart | f

5433=> \q
```

9. На лидере создаем новую БД и таблицу с данными

```bash
postgres$ psql
psql (12.6)
Type "help" for help.

5432=> create database db_checksums;
CREATE DATABASE

5432=> \c db_checksums
You are now connected to database "db_checksums" as user "postgres".

5432=> create table tt(id int);
CREATE TABLE

5432=> insert into tt select 1;
INSERT 0 1
5432=> \q
```

10. Проверяем, что до реплики изменения доходят

```bash
postgres$ psql -p5433
psql (12.6)
Type "help" for help.

5433=> \c db_checksums
You are now connected to database "db_checksums" as user "postgres".

5433=> select * from tt;
 id
----
  1
(1 row)

5433=> \q
```

11. Переключаемся на реплику. Для этого делаем целую цепочку событий

12. Выполняем контрольную точку

```bash
postgres$ psql
psql (12.6)
Type "help" for help.

5432=> checkpoint;
5432=> \q
```

13. Останавливаем лидер

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 stop
waiting for server to shut down.... done
server stopped
```

14. Переключаем реплику на лидер

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 promote
waiting for server to promote.... done
server promoted
```

15. Меняем на "новом" лидере порт с 5433 на 5432

```bash
postgres$ echo "port=5432" >> /var/lib/pgsql/12/main5433/postgresql.conf
```

16. Перестартовываем "новый" лидер, чтобы переподключиться на порт 5432

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2021-04-15 05:55:27.910 UTC [2765] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-15 05:55:27.910 UTC [2765] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-04-15 05:55:27.914 UTC [2765] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-04-15 05:55:27.922 UTC [2765] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2021-04-15 05:55:27.943 UTC [2765] LOG:  redirecting log output to logging collector process
2021-04-15 05:55:27.943 UTC [2765] HINT:  Future log output will appear in directory "log".
 done
server started
```

17. Проверяем работу лидера и что контрльные суммы включены

```bash
postgres$ psql
psql (12.6)
Type "help" for help.

5432=> \x
Expanded display is on.

5432=> select * from pg_settings where name ='data_checksums';
-[ RECORD 1 ]---+-------------------------------------------------------------
name            | data_checksums
setting         | on
unit            |
category        | Preset Options
short_desc      | Shows whether data checksums are turned on for this cluster.
extra_desc      |
context         | internal
vartype         | bool
source          | override
min_val         |
max_val         |
enumvals        |
boot_val        | off
reset_val       | on
sourcefile      |
sourceline      |
pending_restart | f
5432=> \q
```

18. Возвращаем в работу "старый" лидер в виде реплики. Меняем порт с 5432 на 5433. Включаем контрольные суммы. Заносим информацию о "новом" лидере и создаем файл standby.signal

```bash
postgres$ echo "port=5433" >> /var/lib/pgsql/12/main5432/postgresql.conf

postgres$ pg_checksums -D /var/lib/pgsql/12/main5432 -e
Checksum operation completed
Files scanned:  1871
Blocks scanned: 6134
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster

postgres$ cat /var/lib/pgsql/12/main5433/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
wal_level = 'logical'
primary_conninfo = 'user=postgres passfile=''/var/lib/pgsql/.pgpass'' port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

postgres$ nano /var/lib/pgsql/12/main5432/postgresql.auto.conf

postgres$ touch /var/lib/pgsql/12/main5432/standby.signal
```

19. Включаем реплику

```bash
postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 start
waiting for server to start....2021-04-15 05:58:31.689 UTC [2845] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-15 05:58:31.690 UTC [2845] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-15 05:58:31.693 UTC [2845] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-15 05:58:31.700 UTC [2845] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-15 05:58:31.717 UTC [2845] LOG:  redirecting log output to logging collector process
2021-04-15 05:58:31.717 UTC [2845] HINT:  Future log output will appear in directory "log".
 done
server started
```

20. Проверяем работу реплики

```bash
postgres$ psql -p5433
psql (12.6)
Type "help" for help.

5433=> select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 t
(1 row)

5433=> create table tt(id int);
ERROR:  cannot execute CREATE TABLE in a read-only transaction
5433=> \q
```

21. Проверяем, что работает цепочка лидер-реплика

```bash
postgres$ psql
psql (12.6)
Type "help" for help.

5432=> \c db_checksums
You are now connected to database "db_checksums" as user "postgres".

5432=> insert into tt select 2;
INSERT 0 1

5432=> select * from tt ;
 id
----
  1
  2
(2 rows)
```

```bash
5432=> \q

postgres$ psql -p5433
psql (12.6)
Type "help" for help.

5433=> \c db_checksums
You are now connected to database "db_checksums" as user "postgres".
5433=> select * from tt;
 id
----
  1
  2
(2 rows)

5433=> \q
```

## Домашняя работа.
## Минорное обновление кластера с помощью физической репликации

1. Создайте отказоустойчивый кластер по схеме "лидер-реплика"

2. Установите пакет с версией PostgreSQL 12.9 (может быть и старше)

3. Перезагрузите сначала реплику и убедитесь, что поменялась версия PostgreSQL. И она принимает изменения и "догнала" лидера

4. Переключите лидер на реплику

5. Перезагрузите "старый" лидер и убедитесь, что на нем поменялась версия PostgreSQL

6. Подключите "старый" лидер как реплику к "новому" лидеру

<details>
  <summary>Решение:</summary>

1. Создайте отказоустойчивый кластер по схеме "лидер-реплика"

```
student$ sudo -u postgres -i

postgres$ pg_ctl initdb "-D" "/var/lib/pgsql/12/main5432" -o "--data-checksums"

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are enabled.
creating directory /var/lib/pgsql/12/main5432 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
    /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/main5432 -l logfile start

postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 start

waiting for server to start....2021-04-24 11:17:57.923 UTC [2254] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2021-04-24 11:17:57.924 UTC [2254] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-04-24 11:17:57.927 UTC [2254] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-04-24 11:17:57.935 UTC [2254] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2021-04-24 11:17:57.961 UTC [2254] LOG:  redirecting log output to logging collector process
2021-04-24 11:17:57.961 UTC [2254] HINT:  Future log output will appear in directory "log".
 done
server started

postgres$ pg_basebackup -D /var/lib/pgsql/12/main5433 -R -v

pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_2270"
pg_basebackup: write-ahead log end point: 0/2000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

postgres$ echo "port=5433" >> /var/lib/pgsql/12/main5433/postgresql.conf

postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 start

waiting for server to start....2021-04-24 11:18:27.867 UTC [2274] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2021-04-24 11:18:27.867 UTC [2274] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-24 11:18:27.871 UTC [2274] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-24 11:18:27.879 UTC [2274] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-24 11:18:27.896 UTC [2274] LOG:  redirecting log output to logging collector process
2021-04-24 11:18:27.896 UTC [2274] HINT:  Future log output will appear in directory "log".
 done
server started

postgres$ ps -ef | grep postgres

root      2197  2050  0 11:17 pts/0    00:00:00 sudo -u postgres -i
postgres  2198  2197  0 11:17 pts/0    00:00:00 -bash
postgres  2254     1  0 11:17 ?        00:00:00 /usr/pgsql-12/bin/postgres -D /var/lib/pgsql/12/main5432
postgres  2255  2254  0 11:17 ?        00:00:00 postgres: logger
postgres  2257  2254  0 11:17 ?        00:00:00 postgres: checkpointer
postgres  2258  2254  0 11:17 ?        00:00:00 postgres: background writer
postgres  2259  2254  0 11:17 ?        00:00:00 postgres: walwriter
postgres  2260  2254  0 11:17 ?        00:00:00 postgres: autovacuum launcher
postgres  2261  2254  0 11:17 ?        00:00:00 postgres: stats collector
postgres  2262  2254  0 11:17 ?        00:00:00 postgres: logical replication launcher
postgres  2274     1  0 11:18 ?        00:00:00 /usr/pgsql-12/bin/postgres -D /var/lib/pgsql/12/main5433
postgres  2275  2274  0 11:18 ?        00:00:00 postgres: logger
postgres  2276  2274  0 11:18 ?        00:00:00 postgres: startup   recovering 000000010000000000000003
postgres  2277  2274  0 11:18 ?        00:00:00 postgres: checkpointer
postgres  2278  2274  0 11:18 ?        00:00:00 postgres: background writer
postgres  2279  2274  0 11:18 ?        00:00:00 postgres: stats collector
postgres  2280  2274  0 11:18 ?        00:00:00 postgres: walreceiver   streaming 0/3000060
postgres  2281  2254  0 11:18 ?        00:00:00 postgres: walsender postgres [local] streaming 0/3000060
postgres  2282  2198  0 11:18 pts/0    00:00:00 ps -ef
postgres  2283  2198  0 11:18 pts/0    00:00:00 grep --color=auto postgres

postgres$ psql

psql (12.5)
Type "help" for help.

5432=> create database minor_upgrade;

CREATE DATABASE

5432=> \c minor_upgrade

You are now connected to database "minor_upgrade" as user "postgres".

5432=> create table tt (id serial, name text);

CREATE TABLE

5432=> insert into tt (name) select 'name1';

INSERT 0 1

5432=> insert into tt (name) select 'name2';

INSERT 0 1

5432=> \q

postgres$ psql -p5433 minor_upgrade

psql (12.5)
Type "help" for help.

5433=> select * from tt;

 id | name
----+-------
  1 | name1
  2 | name2
(2 rows)
```

2. Установите пакет с версией PostgreSQL 12.6

```
5433=> \q

postgres$ exit
logout

student$ sudo -i

root$ yum install postgresql-12

root$ sudo -u postgres -i

postgres$ psql

psql (12.9, server 12.5)
Type "help" for help.

5432=> select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

postgres=# \q

postgres$ psql -p5433
psql (12.9, server 12.5)
Type "help" for help.

5433=> select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
```

3. Перезагрузите сначала реплику и убедитесь, что поменялась версия PostgreSQL. И она принимает изменения и "догнала" лидера

```
postgres=# \q

postgres$ pg_ctl -D /var/lib/pgsql/12/main5433 restart

waiting for server to shut down.... done
server stopped
waiting for server to start....2021-04-24 11:20:56.417 UTC [2446] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-24 11:20:56.418 UTC [2446] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-24 11:20:56.422 UTC [2446] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-24 11:20:56.430 UTC [2446] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-24 11:20:56.445 UTC [2446] LOG:  redirecting log output to logging collector process
2021-04-24 11:20:56.445 UTC [2446] HINT:  Future log output will appear in directory "log".
 done
server started

[postgres@vs01.s013162.slurm.io ~]$ psql -p5433

psql (12.9)
Type "help" for help.

5433=> select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

postgres=# \q

postgres$ psql minor_upgrade

psql (12.9, server 12.5)
Type "help" for help.

5432=> insert into tt (name) select 'name3';
INSERT 0 1
5432=> select * from tt;
 id | name
----+-------
  1 | name1
  2 | name2
  3 | name3
(3 rows)

5432=> \q

[postgres@vs01.s000000.slurm.io ~]$ psql minor_upgrade -p5433

psql (12.9)
Type "help" for help.

5433=> select * from tt;
 id | name
----+-------
  1 | name1
  2 | name2
  3 | name3
(3 rows)
```

4. Переключите лидер на реплику

```
5433=> \q

postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 stop && pg_ctl -D /var/lib/pgsql/12/main5433 promote && echo "port=5432" >> /var/lib/pgsql/12/main5433/postgresql.conf && pg_ctl -D /var/lib/pgsql/12/main5433 restart

waiting for server to shut down.... done
server stopped
waiting for server to promote.... done
server promoted
waiting for server to shut down.... done
server stopped
waiting for server to start....2021-04-24 11:24:32.487 UTC [2541] LOG:  starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-24 11:24:32.487 UTC [2541] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-04-24 11:24:32.491 UTC [2541] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-04-24 11:24:32.505 UTC [2541] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2021-04-24 11:24:32.526 UTC [2541] LOG:  redirecting log output to logging collector process
2021-04-24 11:24:32.526 UTC [2541] HINT:  Future log output will appear in directory "log".
 done
server started

postgres$ psql

psql (12.9)
Type "help" for help.

5432=> select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

5432=> \q
```

5. Перезагрузите "старый" лидер и убедитесь, что на нем поменялась версия PostgreSQL
6. Подключите "старый" лидер как реплику к "новому" лидеру

```
postgres$ echo "port=5433" >> /var/lib/pgsql/12/main5432/postgresql.conf

postgres$ cat /var/lib/pgsql/12/main5433/postgresql.auto.conf

# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=postgres passfile=''/var/lib/pgsql/.pgpass'' port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

postgres$ nano /var/lib/pgsql/12/main5432/postgresql.auto.conf

postgres$ touch /var/lib/pgsql/12/main5432/standby.signal

postgres$ pg_ctl -D /var/lib/pgsql/12/main5432 start

waiting for server to start....2021-04-24 11:26:29.575 UTC [2572] LOG:  starting PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-24 11:26:29.575 UTC [2572] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2021-04-24 11:26:29.579 UTC [2572] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5433"
2021-04-24 11:26:29.588 UTC [2572] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2021-04-24 11:26:29.608 UTC [2572] LOG:  redirecting log output to logging collector process
2021-04-24 11:26:29.608 UTC [2572] HINT:  Future log output will appear in directory "log".
 done
server started

postgres$ psql -p5433 minor_upgrade

psql (12.9)
Type "help" for help.

5433=> select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)


5433=> \x

Expanded display is on.

5433=> select * from pg_settings where name like '%data%';

5433=> select * from pg_settings where name = 'data_directory';

-[ RECORD 1 ]---+----------------------------------
name            | data_directory
setting         | /var/lib/pgsql/12/main5432
unit            |
category        | File Locations
short_desc      | Sets the server's data directory.
extra_desc      |
context         | postmaster
vartype         | string
source          | override
min_val         |
max_val         |
enumvals        |
boot_val        |
reset_val       | /var/lib/pgsql/12/main5432
sourcefile      |
sourceline      |
pending_restart | f

5433=> show port;

-[ RECORD 1 ]
port | 5433
```

</details>
