Содержание

FAQ доп информация, которая не рассматривалась в практикуме:

Для удобства отображения в psql редактируем содержание файла подсказки .psqlrc (~/.psqlrc)

Рекомендуется также настроить подсказку командного интерпретатора СУБД и вывести информацию по серверу, порту подключения, БД и пользователе. Настраиваем вид подсказки в файле .psqlrc в домашнем каталоге пользователя postgres при подключении к СУБД. переходим под пользователя postgres

sudo su - postgres

Редактируем конфигурационный файл

nano ~/.psqlrc

Добавляем в файл .psqlrc строку пример цветной промпт

\set PROMPT1 '%[%033[0;90m%][%p]%[%033[0m%] %[%033[0;31m%]%n%[%033[0m%]@%[%033[0;34m%]%m%[%033[0m%]:%[%033[0;32m%]%>%[%033[0m%] %[%033[0;36m%]%~%[%033[0m%] %[%033[0;33m%]%[%033[5m%]%x%[%033[0m%]%[%033[0m%]%R%# '
\set PROMPT2 '%[%033[0;90m%][%l]%[%033[0m%] %[%033[0;31m%]%n%[%033[0m%]@%[%033[0;34m%]%m%[%033[0m%]:%[%033[0;32m%]%>%[%033[0m%] %[%033[0;36m%]%~%[%033[0m%] %[%033[0;33m%]%[%033[5m%]%x%[%033[0m%]%[%033[0m%]%R%# '

Сохраняем и вызываем psql для проверки

psql

если мы работаем из под другого пользователя в системе с правами sudo, то можно подключиться к БД по локальному соединению так

sudo -iu postgres psql

Пояснение для подсказки '%M:%> %n@%/%R%#%x ': \set PROMPT1 '%M:%> %n@%/%R%#%x '

%M имя хоста сервера баз данных отображается «[local]», если соединение осуществляется через сокет домена Unix
%> прослушиваемый порт
%n имя пользователя сеанса
%/ текущая база данных
%R находитесь ли вы в однострочном режиме (^) или отключены (!), но обычно =
%# являетесь ли вы суперпользователем (#) или обычным пользователем (>)
%x статус транзакции - обычно пусто, если только не в блоке транзакции (*)

Пример вывода командной строки с подсказкой для сервера СУБД с IP 10.2.0.11, работающем на порту 5432, для пользователя postgres и БД test

10.2.0.11:5432 postgres@test=#

Cписок команд psql которые часто используются.

\l ## список БД
\dt ## список таблиц
\du ## список пользователей
\db ## список табличных пространств
\dn ## список схемы

\dx ## список установленных расширений
\dx+ pg_stat_statements ## Посмотрим содержимое расширения
SELECT * FROM pg_available_extensions; ## список доступных расширений

\d table_name ## структура таблицы
\c db_name ## подключиться к БД
\password user ## смена пароля УЗ в БД
\d+ pg_stat_wal_receiver ## вывести поля таблицы
\x ## задать параметр вывода следующим select таблицы по вертикали в читаемом виде, чтобы отключить также \x
select tantor_version(); ## посмотреть версию тантор

эти переменные также можно указать в .psqlrc

\pset pager on ## вкл постраничный пейджер, окно вывода команд с ожиданием в конце (end)
\pset pager off ## выкл постраничный пейджер
\pset pager ## статус постраничный пейджер
\pset linestyle unicode ## вывод таблиц будет отображаться линиями, вместо тире
\pset border 2
export PAGER='less -SXF' ## переменная окружения ОС, сменить утилиту вывода страницы в psql для пейджер.

Доп утилиты в ОС для работы с postgres, которые начинаются на pg*

https://docs.tantorlabs.ru/tdb/ru/17_5/se/reference-client.html

sudo su - postgres

</code> psql pg_ctl –help pg_basebackup –help pg_dumpall –help pg_dump –help pg_upgrade –help pg_isready –help </code> vacuumlo - (к вакуумированию (VACUUM) не имеет отношение) Это удобная для периодического запуска утилита удаления (вычистки) осиротевших больших объектов из баз данных кластера. Автоматизировать удаление осиротевших больших объектов можно разными способами (например, триггерами), эта утилита один из них. Расширение «lo» содержит функцию lo_manage() для использования в триггерах, предотвращающих появление осиротевших больших объектов.

pg_config –sharedir - директория с файлами расширения

ls -la /opt/tantor/db/16/share/postgresql

Если psql не запускается под пользователем postgres (bash: psql: команда не найдена), значит в переменной окружения path отсутствует путь до /opt/tantor/db/16/bin


редактируем переменную окружения

nano ~/.bashrc

добавляем и сохраняем

export PATH=/opt/tantor/db/16/bin:$PATH

Перезапускаем оболочку

exec bash

Проверяем подключение, пример

psql -p 5432 -h localhost -U postgres
!!! При необходимости, если есть отдельно требования заказчика.

Настройки правил подключения к БД. Документация по настройке pg_hba.conf: https://docs.tantorlabs.ru/tdb/ru/16_6/se/auth-pg-hba-conf.html#pg-hba-conf

sudo nano /var/lib/postgresql/tantor-be-16/data/pg_hba.conf
!!! При необходимости, если есть отдельно требования заказчика.
По умолчанию в параметрах конфигурации в файле postgresql.conf сервера СУБД не настроен вывод системных журналов СУБД в отдельных каталог и нет прямой ссылки на каталог данных.
Рекомендуется включить возможность вывода системных журналов отдельный каталог и указать прямую ссылку на каталог данных.
sudo nano /var/lib/postgresql/tantor-be-16/data/postgresql.conf

Укажем путь сохранения log файлов

logging_collector = on;
log_directory = '/var/lib/postgresql/tantor-be-16/data/log/'

Применение параметров без перезагрузки сервера СУБД с проверкой

sudo -iu postgres psql
SELECT pg_reload_conf();
SHOW logging_collector;

посмотреть лог БД, пример:

less /var/lib/postgresql/tantor-be-16/data/log/postgresql-2024-05-04_194815.log
!!! не забудьте скорректировать скрипт Ротация логов.

При проверке системных журналов ОС

sudo journalctl -u tantor-be-server-16.service

Утилита сообщает, что журналы СУБД Tantor далее будут выводится в подкаталог log, каталога с данными БД. Далее, в нашем примере, процесс запуска СУБД Tantor Можно посмотреть в каталоге /var/lib/postgresql/tantor-be-16/data/log в содержании самого нового файла postgresql-<дата>.log

Сетевые настройки слушателя и порта инстанса СУБД.

sudo nano /var/lib/postgresql/tantor-be-16/data/postgresql.conf

ищем и выставляем параметры

listen_addresses = '*'

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

listen_addresses = 'localhost, <ip>'

port = 5433

перезагружаем и проверяем

sudo systemctl restart tantor-be-server-16
sudo ss -tulnp | grep postgres

подключаемся к СУБД по новому порту

sudo -iu postgres psql -p 5433 -h 10.2.0.11 -U postgres
!!! При необходимости, если есть отдельно требования заказчика.
Можно перенести каталог с данными экземпларя СУБД на отдельный другой католог или точку монтирования (диск) в ОС

Останавливаем службу СУБД

sudo -i
systemctl stop tantor-be-server-16.service

Редактируем в postgresql.conf ссылку на новый каталог данных

nano /var/lib/postgresql/tantor-be-16/data/postgresql.conf

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

data_directory = '/new/data/directory'

Переносим data каталог через команду mv или копируем через cp -R в новый каталог

cp -R /var/lib/postgresql/tantor-be-16/data /new/data/directory

Назначаем права на новый каталог

sudo chown -R postgres:postgres /new/data/directory

Меняем путь в службе

sudo nano /lib/systemd/system/tantor-be-server-16.service

Environment=PGDATA=/new/data/directory

Запускаем экземпляр

sudo systemctl daemon-reload
sudo systemctl start tantor-be-server-16.service

Пакеты в ОС можно устанавливать через команды
sudo dpkg -i **.deb \\
<code>
>Нужно будет также установить все зависимости руками. \\

> При этом инициализация инстанса СУБД не будет производиться автоматически.

> Если нужно создать инстанс СУБД или пересоздать чистую конфигурацию в другой каталог, инициализация СУБД Tantor производится под пользователем postgres следующим образом: \\

----

Переходим в УЗ postgres

<code>
sudo su - postgres

Инициализация нового экземпляра, каталог должен быть пустым

/opt/tantor/db/16/bin/initdb -D /var/lib/postgresql/tantor-be-16/data2 --data-checksums

Правим порт, например 5433, если нужно, смотри комментарий ниже.

nano /var/lib/postgresql/tantor-be-16/data2/postgresql.conf

!!! Если планируется запускать параллельно несколько экземпляров, то порты конфигурации СУБД в postgresql.conf должны быть разные,
В продуктивных системах это не рекомендуется, так как нагрузка CPU и RAM между процессами может делиться неравномерно, но рамках тестирования допустимо.

Для параллельного запуска экземпляров одной и той же версии сборки СУБД создадим отдельный новый файл службы под root.

sudo -i
cp /lib/systemd/system/tantor-be-server-16.service /lib/systemd/system/tantor-be-server-16-data2.service
nano /lib/systemd/system/tantor-be-server-16-data2.service

Редактируем новый файл службы, корректируем путь до нового каталога с данными и сохраняем

Environment=PGDATA=/var/lib/postgresql/tantor-be-16/data2

Запустим новую службу

systemctl daemon-reload
systemctl enable --now tantor-be-server-16-data2
systemctl status tantor-be-server-16-data2.service

Ручной запуск инстанса СУБД без службы.

sudo su - postgres

/opt/tantor/db/16/bin/pg_ctl start -D /var/lib/postgresql/tantor-be-16/data2

Останавливаем

/opt/tantor/db/16/bin/pg_ct stop -D /var/lib/postgresql/tantor-be-16/data2

посмотреть все возможности pg_ctl

/opt/tantor/db/16/bin/pg_ct --help
!!! Если планируется установка нескольких версий сборок пакетов СУБД
Например Tantor 15, Tantor 16 версий, то путь до pg_ctl должен быть соответствующий версии.
Службы для разных версий СУБД после установки пакетов будут разные, создавать отдельно не нужно.

Обновление СУБД tantor по мажорной версии на, пример с 15 на 16.

Вариант 1 Возможен только между одинаковыми сборками СУБД.
se15 → se16

be15 → be16

se1c 15 → se1c 16
В противном случае при проверке будут ошибки, и тогда Вариант 2, обновление СУБД можно выполнить только через восстановление из бекапа pg_dumpall.

делаем логический бекап БД, pg_basebackup сюда не подойдет, так как pg_basebackup создаёт полную копию каталога данных.

pg_dumpall -U postgres > backup.sql

Установите пакет новой версии PostgreSQL c инициализацией новой БД процесс описан в начале файла. инициализацию можно выполнить руками если вы просто установили пакет.

/opt/tantor/db/16/bin/initdb -D /var/lib/postgresql/tantor-se-16/data --no-data-checksums

обновите права на подкаталоги

chown -R postgres:postgres /var/lib/postgresql

останавливаем все СУБД (рекомендуется для больших баз)

systemctl stop tantor-*

Проверьте совместимость кластеров

su - postgres
/opt/tantor/db/16/bin/pg_upgrade \
--old-datadir /var/lib/postgresql/tantor-be-15/data \
--new-datadir /var/lib/postgresql/tantor-be-16/data \
--old-bindir /opt/tantor/db/15/bin \
--new-bindir /opt/tantor/db/16/bin \
--check     ## добавьте -v для полного вывода

Вариант 1 Обновление СУБД через утилиту pg_upgrade.

Процесс скопирует данные из старого кластера в новый и настроит его для работы

/opt/tantor/db/16/bin/pg_upgrade \
--old-datadir /var/lib/postgresql/tantor-be-15/data \
--new-datadir /var/lib/postgresql/tantor-be-16/data \
--old-bindir /opt/tantor/db/15/bin \
--new-bindir /opt/tantor/db/16/bin

Если обновление успешно, можно удалить старую версию. будет сообщение: Не забудьте проверить postgresql.auto.conf, postgresql.conf и pg_hba.conf на новой инсталяции, если конфигурация дефолтная, перенесите со старой в новую.

Обновление завершено

Статистика оптимизатора утилитой pg_upgrade не переносится.
Запустив новый сервер, имеет смысл выполнить:
/opt/tantor/db/16/bin/vacuumdb –all –analyze-in-stages
При запуске этого скрипта будут удалены файлы данных старого кластера:
./delete_old_cluster.sh

Перенесите настройки из старого postgresql.conf и pg_hba.conf в новый кластер, если они отличаются.

запускаем кластер

/opt/tantor/db/16/bin/pg_ctl -D /var/lib/postgresql/tantor-be-16/data start

обновляем статистику

/opt/tantor/db/16/bin/vacuumdb --all --analyze-in-stages

подключаемся к бд и проверяем

psql
select tantor_version();
SELECT version();
\l
\q

удаляем старый кластер

./delete_old_cluster.sh

или вручную

rm -rf /var/lib/postgresql/tantor-<старая_версия>

удаляем старые пакеты

apt remove tantor-<старая_версия>

Вариант 2: pg_dump + pg_restore (если pg_upgrade недоступен из-за ошибо совместимости)

Перенесите настройки из старого postgresql.conf и pg_hba.conf в новый кластер пример:

cd /var/lib/postgresql/tantor-be-15/data
cp postgresql.conf postgresql.auto.conf pg_hba.conf /var/lib/postgresql/tantor-be-16/data

Запустите кластер новую версию СУБД

/opt/tantor/db/16/bin/pg_ctl -D /var/lib/postgresql/tantor-be-16/data start

Восстановите данные:

Если в бэкапе есть ошибки (например, из-за различий в версиях),добавьте флаг –no-sync для игнорирования мелких проблем.
psql -U postgres -f backup.sql

проверяем что все базы на месте, подключаемся к бд и проверяем

psql
select tantor_version();
SELECT version();
\l
\q

Если обновление успешно, можно удалить старую версию.

apt remove tantor-<старая_версия>
rm -rf /var/lib/postgresql/tantor-<старая_версия>

Если нужно перенастроить переменные платформы /opt/tantor/eco/platform.env

например: после установки внести настройки почты переходим в каталог

cd /opt/tantor/eco/

останавливаем докеры

sudo docker-compose --env-file=platform.env down

правим файл c переменными и сохраняем

nano platform.env
EMAIL_PORT=
EMAIL_USERNAME=
EMAIL_HOST=
EMAIL_PASSWORD=

поднимаем контейнеры с новыми параметрами

docker-compose --env-file platform.env up -d

проверяем платформу через браузер.

удаление платформы

sudo docker stop $(docker ps -aq)
sudo docker rm $(docker ps -aq)
sudo docker container prune
docker system prune -a
sudo docker rmi $(docker images -q)
sudo rm -rf /opt/tantor

удаление СУБД и агента

sudo apt purge tantor-be-server-16
sudo rm -rf /opt/tantor/
sudo rm -rf /var/lib/postgresql/tantor-be-16/
sudo apt purge pmaagent
sudo rm -rf /var/lib/pma/