Проект

Общее

Профиль

Установка и настройка Postgres

Требования:

  • Postgres не ниже версии 14.
  • Крайне не рекомендуется использование утилиты PgBouncer.
  • В силу специфики работы Postgres (PG активно забирает, но самостоятельно не возвращает ресурсы операционной системе) установка СУБД и TEGU Enterprise на одной вычислительной ноде не рекомендуется и не поддерживается.
  • Обязательно необходим пакет postgresql-contrib (как правило в таких системах как REDOS, AltLinux его приходится устанавливать дополнительно).

Note

Что делать если забыли установить? Если не установлен пакет postgresql-contrib, то в логе почтового сервера будет ошибка:

[DEBUG] Dirty database version 5. Fix and force version.

Для исправления необходимо установить postgresql-contrib, удалить базу tegu_settings и создать ее заново.

1. Установите СУБД Postgres

Соблюдая описанные выше требования, на отдельной ноде установите выбранный вами СУБД Postgres удобным для вас способом, способом,
рекомендованным вендором вашей ОС, вендором вашей Postgres или воспользуйтесь нашими инструкциями для установка PostgreSQL на

2. Создайте пользователя tegu

Переходим в postrges su - postgres -s /bin/bash
ил sudo -u postgres -s /bin/bash

Создаем пользователя createuser -d -S -E -P tegu

3. Создайте базы данных

Необходимо создать 3 базы данных:

tegu_queue - база данных очередей
tegu_mailboxes - база данных почтового хранилища
tegu_settings - база данных настроек почтового сервера

Выполните:

createdb -E UTF-8 -O tegu tegu_queue
createdb -E UTF-8 -O tegu tegu_mailboxes
createdb -E UTF-8 -O tegu tegu_settings

4. Настройка доступа из подсетей

nano /var/lib/pgsql/data/pg_hba.conf

Или так (где номер это версия postgres) nano /etc/postgresql/15/main/pg_hba.conf
Если версия Pro то путь может быть такой nano /var/lib/pgpro/std-14/data/pg_hba.conf

Пример файла pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
host    all             all             10.199.199.0/24         md5
host    all             all             10.44.44.0/24           md5
host    all             all             10.0.0.0/8              md5

Раскомментируйте в конфигурационном файле postgresql.conf port 5432 и ip адрес с которого можно подключиться к базе данных.

Пример файла postgresql.conf

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

для ванильной версии postgres nano /var/lib/pgsql/data/postgresql.conf
или так nano /etc/postgresql/15/main/postgresql.conf
для версии pro nano /var/lib/pgpro/std-14/data/postgresql.conf

После правок в конфигурационных файлах, перезапустите СУБД.

Некоторые полезные команды Postgres

  • Перезапуск Postgres pg_ctlcluster 15 main restart
  • Посмотреть какие базы данных есть на сервере psql -U postgres -c "\l+"
  • Удалить базы данных
psql    
DROP DATABASE tegu_mailboxes;
  • Чтение списка всех пользователей
SELECT usename
FROM pg_user;
  • Посмотреть пользователей Postgres c дополнительнй информацией
SELECT *
FROM pg_user;
  • Проверить привилегии и роли для конкретного пользователя
SELECT *
FROM information_schema.role_table_grants
WHERE grantee = 'имя_пользователя';
  • Просмотр списка всех ролей, к которым принадлежит пользователь
SELECT r.rolname
FROM pg_roles r
JOIN pg_auth_members m ON r.oid = m.roleid
JOIN pg_roles r2 ON r2.oid = m.member
WHERE r2.rolname = 'имя_пользователя';
  • Просмотр списка баз данных, к которым имеет доступ пользователь
SELECT datname
FROM pg_database
WHERE has_database_privilege('имя_пользователя', datname, 'CONNECT');
  • Проверка привилегий для конкретного пользователя
SELECT grantee, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'имя_пользователя';
  • Удалить пользователей Postgres
DROP USER имя_пользователя;
  • Как проверить подключение к серверу баз данных
psql -U  tegu -d tegu_settings -h 172.16.10.2 -p 5432 -W
где: 
-U (имя пользователя
-d (имя базы данных)
-h (хост сервера базы данных)
-p (порт)
-W (пароль)