Установка сервера БД Колибри
Колибри-Сфера использует PostgreSQL 16 или выше в качестве системного хранилища данных. Перед установкой Системы требуется установить и настроить системное ХД.
Замечание
Далее по тексту приведён пример установки сервера PostgreSQL 16 для Ubuntu 22.04, установка на других ОС может отличаться.
Инструкции по установке можно найти по адресу https://www.postgresql.org/download/
Установка PostgreSQL
Эта инструкция описывает установку PostgreSQL 16 на Ubuntu 22.04.
1. Добавление репозитория PostgreSQL:
По умолчанию Ubuntu 22.04 предоставляет только определенные версии PostgreSQL через apt. Чтобы установить PostgreSQL 16, необходимо добавить репозиторий PostgreSQL.
sudo apt update
sudo apt install -y ca-certificates gnupg
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
2. Импорт ключа GPG:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
3. Обновление списка пакетов:
sudo apt update
4. Проверка доступности версии 16:
Перед установкой убедитесь, что версия 16 доступна для установки:
apt-cache policy postgresql
В выводе команды вы должны увидеть что-то подобное:
postgresql:
Installed: (none)
Candidate: 16-1.pgdg110+1
Version table:
16-1.pgdg110+1 500
500 http://apt.postgresql.org/pub/repos/apt jammy-pgdg/main amd64 Packages
14-1.pgdg100+1 500
500 http://apt.postgresql.org/pub/repos/apt jammy-pgdg/main amd64 Packages
Это подтверждает, что версия 16 доступна для установки. Если вы видите только другие версии, убедитесь, что вы правильно добавили репозиторий и обновили список пакетов.
5. Установка PostgreSQL 16:
sudo apt install postgresql-16 postgresql-contrib-16
6. Проверка установки:
sudo systemctl status postgresql
Если PostgreSQL запущен, вы увидите статус active (running). Чтобы убедиться, что установлена именно версия 16, можно проверить версию сервера:
psql --version
В выводе должно быть указано psql (PostgreSQL) 16.x.
Настройка доступа
По умолчанию PostgreSQL настроен на локальные подключения. Чтобы разрешить подключения из других компьютеров, нужно настроить файл postgresql.conf.
1. Нахождение файла postgresql.conf:
Расположение файла зависит от версии PostgreSQL. Для версии 16 обычно находится в /etc/postgresql/16/main/postgresql.conf.
2. Редактирование postgresql.conf:
Откройте файл postgresql.conf в текстовом редакторе с правами root:
sudo nano /etc/postgresql/16/main/postgresql.conf
3. Изменение настроек:
Найдите строку listen_addresses = 'localhost' и измените её, чтобы разрешить подключения с других компьютеров. Например, чтобы разрешить подключения со всех адресов, измените её на listen_addresses = '*' (это небезопасно для production, рекомендуется указать конкретные IP-адреса).
4. Настройка файла pg_hba.conf:
Этот файл контролирует доступ к базе данных. Расположение файла аналогично postgresql.conf. Откройте его:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Добавьте строки, разрешающие подключения с других компьютеров. Например, чтобы разрешить подключения с IP-адреса 192.168.1.100 к базе данных all с использованием пароля, добавьте:
host all all 192.168.1.100/32 md5
Замените 192.168.1.100 на IP-адрес подключающегося клиента. /32 указывает на конкретный IP-адрес. Для разрешения подключения с целой подсети, измените маску подсети. md5 указывает на использование MD5 для аутентификации паролем.
5. Перезапуск PostgreSQL:
После внесения изменений в postgresql.conf и pg_hba.conf, перезапустите PostgreSQL, чтобы изменения вступили в силу:
sudo systemctl restart postgresql
Конфигурирование
Настройка PostgreSQL для оптимальной производительности требует тщательной настройки параметров конфигурации. Примерные значения, которые могут быть изменены в postgresql.conf:
| Свойство | Значение |
|---|---|
listen_addresses |
Список разрешённых адресов для подключения или '*' Например, listen_addresses = '*' |
work_mem |
512MB (Регулирует объем памяти, выделяемый для сортировки и хэширования данных. Увеличивайте, если возникают проблемы с сортировкой больших объемов данных.) |
shared_buffers |
25% от RAM сервера (Кэширует данные. Увеличьте, если у вас достаточно RAM.) |
maintenance_work_mem |
1GB (Используется для операций обслуживания, таких как VACUUM и CREATE INDEX. Увеличивайте, если эти операции занимают много времени.) |
effective_cache_size |
от 50 до 75 процентов от RAM (Указывает PostgreSQL, сколько памяти доступно для кеширования данных операционной системой.) |
lc_monetary |
'ru_RU.UTF-8' (Настройка региональных параметров для денежных величин) |
lc_numeric |
'ru_RU.UTF-8' (Настройка региональных параметров для чисел) |
lc_time |
'ru_RU.UTF-8' (Настройка региональных параметров для времени) |
datestyle |
'ISO, DMY' (Формат даты) |
lc_messages |
'ru_RU.UTF-8' (Сообщения на русском языке) |
Важно: Эти значения являются лишь отправной точкой. Оптимальные значения зависят от вашей нагрузки и аппаратного обеспечения. Мониторинг производительности и корректировка настроек необходимы для достижения оптимальной производительности.
Просмотр журнала
Журналы PostgreSQL обычно находятся в каталоге /var/log/postgresql/16/main/. Можно просматривать их в реальном времени с помощью команды:
sudo tail -f /var/log/postgresql/16/main/postgresql.log
Восстановление БД из резервной копии
Для восстановления базы данных из резервной копии, используйте утилиту pg_restore или psql. Если резервная копия была создана с помощью pg_dump, используйте pg_restore.
Пример использования pg_restore:
pg_restore -U postgres -d <имя_базы_данных> <путь_к_резервной_копии.dump>
Замените <имя_базы_данных> на имя базы данных, в которую вы хотите восстановить данные, и <путь_к_резервной_копии.dump> на путь к файлу резервной копии. Укажите имя пользователя (например, postgres) с достаточными правами.
Если резервная копия - это простой SQL-файл, можно восстановить её с помощью psql:
psql -U postgres -d <имя_базы_данных> -f <путь_к_резервной_копии.sql>
Опять же, замените <имя_базы_данных> и <путь_к_резервной_копии.sql> на соответствующие значения.
Совет
Для отображения системных ошибок на английском в свойстве lc_messages укажите 'en_US.UTF-8'.
При этом необходимо убедиться в наличии указанной локали:
locale -a
Если в перечне отсутствует локаль 'en_US.UTF-8', её необходимо сгенерировать. Для этого добавляем локаль в список, открыв файл со списком и убрав знак комментария # в строке с нужной локалью.
sudo nano -l /etc/locale.gen
После сохранения файла, сгенерируем локаль:
sudo locale-gen