﻿# PostgreSQL

> [HTML Version](postgresql.html)

В статье описаны:

- установка PostgreSQL для ОС Ubuntu Linux 24.04. Вы также можете ознакомиться с кратким руководством в [официальной документации PostgreSQL](https://www.postgresql.org/download/linux/ubuntu/);

- [подготовка базы данных в PostgreSQL к восстановлению](#prepare-to-recovery).

Перед установкой СУБД:

- проверьте поддерживаемые версии PostgreSQL для корректной работы системы в статье [«Системные требования ELMA365 On-Premises»](elma365-enterprise-on-premises.md#postgresql);

- оцените планируемую нагрузку. При больших объёмах данных рекомендуется устанавливать СУБД на отдельной виртуальной машине. Это позволит избежать конкуренции за ресурсы и обеспечить стабильную работу системы ELMA365. Подробнее о вариантах организации инфраструктуры читайте в статьях [«ELMA365 On-Premises Standard»](elma365-on-premises-standard.md) и [«ELMA365 On-Premises Enterprise»](elma365-enterprise.md).

````
начало внимание

````
Для примера в статье используется имя базы **elma365**, пользователь **elma365 **и пароль **SecretPassword**.** **При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

````
конец внимание

````
Установка состоит из шести этапов:

1. [Установка PostgreSQL](#install-postgresql).

2. [Настройка PostgreSQL](#set-up-postgresql).

3. [Настройка подключения к PostgreSQL](#set-up-connection-to-postgresql).

4. [Настройка ограничений и лимитов к PostgreSQL](#set-limits-to-postgresql).

5. [Подготовка PGBouncer (опционально)](#prepare-pgbouncer).

6. [Подключение к PostgreSQL](#connect-to-postgresql).

## Шаг 1. Установка PostgreSQL

Для установки PostgreSQL добавьте официальный репозиторий:

````
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt \$(lsb\_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -  
sudo apt update

````
Далее установите PostgreSQL:

````
sudo apt install postgresql-18

## ````
Шаг 2. Настройка PostgreSQL

````
Начало примечание

````
**Примечание**

Для пароля разрешается применять следующие символы: 

- заглавные латинские буквы: от A до Z;

- строчные латинские буквы: от a до z; 

- цифры от 0 до 9; 

- символы: -\_.

Зарезервированные (недопустимые) символы:

\! \* ' ( ) ; : @ \& = + \$ , / ? % # \[ \]

````
Конец примечание

````
Для настройки PostgreSQL используйте следующие команды:

1. Создайте отдельного пользователя **elma365** с паролем **SecretPassword** для работы с БД. Имя пользователя и пароль приведены для примера:

````
sudo -u postgres psql -c "CREATE ROLE elma365 WITH login password 'SecretPassword';"

2. ````
Создайте отдельную базу данных **elma365** с базовой локалью и назначьте выделенного пользователя **elma365** её владельцем. Нельзя использовать существующую базу, так как система создаёт таблицы и схемы:

````
sudo -u postgres psql -c "CREATE DATABASE elma365 WITH OWNER elma365;"

````
Создание базы данных с локалью ru\_RU.UTF-8

  
Вы можете создать базу данных **elma365** с локалью** ru\_RU.UTF-8**. Это позволит улучшить работу механизмов сортировки и индексирования русскоязычных данных, а также ускорить выполнение поисковых и текстовых операций. Для этого:

1. Убедитесь, что локаль **ru\_RU.UTF-8** доступна в системе:

````
locale -a | grep ru\_RU

````
  
При наличии локали отобразится её название.

2. Если в системе отсутствует локаль **ru\_RU.UTF-8**, установите её, выполнив команду:

````
sudo locale-gen ru\_RU.UTF-8 \&\& sudo update-locale

````
  
После установки перезагрузите сервис PostgreSQL для применения изменений:

````
sudo systemctl restart postgresql

3. ````
Создайте базу данных с локалью** ru\_RU.UTF-8**:

````
sudo -u postgres psql -c "CREATE DATABASE elma365 WITH OWNER = elma365  
LOCALE\_PROVIDER = icu ICU\_LOCALE = 'ru-RU' ENCODING = 'UTF8' LC\_COLLATE =  
'ru\_RU.UTF-8' LC\_CTYPE = 'ru\_RU.UTF-8' TEMPLATE = template0;"
````

3. ````
Добавьте необходимые расширения для базы данных **elma365**:

````
sudo -u postgres psql -d elma365 -c "CREATE EXTENSION \\"uuid-ossp\\"; CREATE EXTENSION pg\_trgm;"

## ````
Шаг 3. Настройка подключения к PostgreSQL

1. Добавьте IP-адрес сервера, на котором запущен PostgreSQL, в конфигурационный файл \[OBJECT\] в параметр** **\[OBJECT\], например, \[OBJECT\]:

````
sudo nano /etc/postgresql/18/main/postgresql.conf  
listen\_addresses = 'localhost, 192.168.10.10'

````
Настройка включения TLS в PostgreSQL

  
Для включения поддержки TLS в PostgreSQL в файле конфигурации \[OBJECT\]** **нужно:

1. Включить поддержку TLS, установив значение \[OBJECT\] в параметре \[OBJECT\].

2. В параметре \[OBJECT\] указать путь до файла корневого CA.

3. В параметре \[OBJECT\] указать путь до файла сертификата сервера.

4. В параметре \[OBJECT\] указать путь до файла закрытого ключа.

````
ssl = on  
ssl\_ca\_file = '/etc/ssl/certs/CA.pem'  
ssl\_cert\_file = '/etc/ssl/certs/ssl-cert.pem'  
ssl\_key\_file = '/etc/ssl/private/server.key'

````
  
Подробнее о настройке TLS в PostgreSQL читайте в [официальной документации PostgreSQL](https://www.postgresql.org/docs/13/ssl-tcp.html).

2. Добавьте в конец конфигурационного файла авторизации \[OBJECT\] адрес сети, в которой работают ноды elma365:

````
sudo nano /etc/postgresql/18/main/pg\_hba.conf  
host    all             all             192.168.0.0/16              md5

3. ````
Перезагрузите сервис PostgreSQL:

````
sudo systemctl restart postgresql

## ````
Шаг 4. Настройка ограничений и лимитов к PostgreSQL

1. Откройте для редактирования конфигурационный файл \[OBJECT\]:

````
sudo nano /etc/postgresql/18/main/postgresql.conf

2. ````
Увеличьте максимальное количество подключений, изменив значение параметра \[OBJECT\] на \[OBJECT\]:

````
max\_connections = 2000

3. ````
Увеличьте максимальное количество блокировок на транзакцию, изменив значение параметра \[OBJECT\] на \[OBJECT\]. Также нужно раскомментировать эту строку (убрать знак решётки #):

````
max\_locks\_per\_transaction = 512

4. ````
Перезагрузите сервис PostgreSQL:

````
sudo systemctl restart postgresql

5. ````
В некоторых дистрибутивах PostgreSQL параметр ````
\[OBJECT\]````
 отвечающий за интерпретацию символов backslash, выключен. Проверьте и включите параметр:

````
standard\_conforming\_strings = on

6. ````
Установите временную зону базы данных в UTC+0:

````
timezone = 'UTC'

## ````
Шаг 5. Подготовка PGBouncer (опционально)

PGBouncer предназначен для управления пулом соединений к PostgreSQL и позволяет минимизировать издержки, связанные с установлением новых подключений к PostgreSQL.

Про установку и настройку PGBouncer читайте в статье [«Установка PGBouncer»](pgbouncer-installation.md).

## Шаг 6. Подключение к PostgreSQL

Строка подключения к PostgreSQL:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:5432/elma365?sslmode=disable

````
Строка подключения PostgreSQL с TLS:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:5432/elma365?sslmode=require

````
Подключение к PostgreSQL через PGBouncer

  
Строка подключения к PGBouncer:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:6432/elma365?sslmode=disable

````
  
Строка подключения PGBouncer с TLS:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:6432/elma365?sslmode=require
````

## ````
Подготовка базы данных в PostgreSQL к восстановлению

Если вам потребовалось восстановить базу данных из резервной копии, сначала подготовьте БД к восстановлению.

Подробнее про резервное копирование читайте в статьях:

- [«Резервное копирование и восстановление баз данных внешними средствами»](dump_db.md#backup-posgresql);

- [«Резервное копирование и восстановление баз данных: утилита Elma365-Backupper»](database-backup-and-recovery.md#backup-database);

- [«Резервное копирование и восстановление данных ELMA365 Standard»](backup-restore-elma365standard.md#backup).

````
Начало внимание

````
Предварительно убедитесь, что у вас есть резервная копия удаляемой базы данных. Только после этого приступайте к удалению БД.

````
Конец внимание

1. ````
Удалите базу данных **elma365**:

````
sudo -u postgres psql -c "DROP DATABASE elma365 WITH (FORCE);"

2. ````
Создайте пустую базу данных **elma365** для последующего восстановления БД из резервной копии. Для этого выполните действия из [шага 2 в настройках PostgreSQL](#create-db).

3. После этого выполните восстановление данных, в зависимости от вашей поставки ELMA365 On-Premises и способа резервного копирования:

- [восстановление резервной копии с помощью утилиты Elma365-Backupper](database-backup-and-recovery.md#recovery-database);

- [восстановление резервной копии с помощью WAL-G](backup-and-recovery-with-wal-g-and-rclone.md#wal-g-in-postgres);

- [восстановление для резервного копирования внешними средствами](dump_db.md#recovery-posgresql);

- [восстановление резервной копии в поставке Standard](backup-restore-elma365standard.md#restore-data).