===== 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/