===== 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
psql
pg_ctl --help
pg_basebackup --help
pg_dumpall --help
pg_dump --help
pg_upgrade --help
pg_isready --help
''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, '
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 \\
>Нужно будет также установить все зависимости руками. \\
> При этом инициализация инстанса СУБД не будет производиться автоматически.
> Если нужно создать инстанс СУБД или пересоздать чистую конфигурацию в другой каталог, инициализация СУБД Tantor производится под пользователем postgres следующим образом: \\
----
Переходим в УЗ postgres
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/