# Установка PostgreSQL 12 на CentOS 8 ## Установка пакетов ```bash sudo dnf module enable postgresql:12 sudo dnf install postgresql-server ``` --- ## Создание нового кластера баз данных PostgreSQL ### Шаг 1. Изменение расположения кластера БД по умолчанию Если будет использоваться место хранения по умолчанию `/var/lib/pgsql/data/`, то этот шаг нужно пропустить. Будем использовать в качестве нового расположения кластера БД `/mnt/storage/pgsql/data`. #### 1.1. Создадим папку ```bash sudo mkdir /mnt/storage/pgsql sudo chown postgres:postgres /mnt/storage/pgsql ``` ```{index} systemd; systemctl edit, systemd; unit file ``` #### 1.2. Изменим место хранения по умолчанию ```bash sudo systemctl edit postgresql.service ``` В открывшемся редакторе вводим: ```text [Service] Environment=PGDATA=/mnt/storage/pgsql/data ``` В результате создаётся файл `/etc/systemd/system/postgresql.service.d/override.conf`, который переопределяет *только* указанные нами параметры стандартного unit-файла. При обновлении пакетов, переустановке и т.п. данный файл сохраняется. ```{hint} Дефолтный unit-файл находится в `/usr/lib/systemd/system/postgresql.service`. Редактировать его, как вы знаете, не следует. ``` ### Шаг 2. Инициализация кластера ```bash sudo postgresql-setup --initdb ``` ### Шаг 3. Разрешение подключений к базе извне ```{index} postgresql; postgresql.conf ``` #### 3.1. postgresql.conf ```bash sudo vim /mnt/storage/pgsql/data/postgresql.conf ``` ```text listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) ... ... password_encryption = scram-sha-256 # md5 or scram-sha-256 ``` ```{index} postgresql; pg_hba.conf ``` #### 3.2. pg_hba.conf ```bash sudo vim /mnt/storage/pgsql/data/pg_hba.conf ``` Добавляем строки вида ```text host all all 100.64.0.160/27 scram-sha-256 ``` Лучше вместо `all-all` указать конкретного пользователя и базу данных. Лучше вместо `password` (cleartext) использовать один из разрешённых хешей. ### Шаг 4. Автоматический запуск демона ``` sudo systemctl enable --now postgresql.service ``` --- ## Администрирование По умолчанию при установке создаётся пользователь `postgres` без пароля, стать им можно только с помощью `su`/`sudo`: ```bash sudo -iu postgres ``` Основные задачи по администрированию выполняются с помощью фронт-энда для cli: ```bash psql ``` ``````{hint} Можно сразу войти во фронт-энд: ``` sudo -iu postgres psql ``` ``````