Files
han-app/ops-monitoring/pg_connection_test.sh
T

36 lines
2.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# 1. Безопасная загрузка .env: убираем комментарии, удаляем \r (Windows-переносы) и делаем export
export $(grep -v '^#' .env | sed 's/\r$//' | xargs)
echo "=== 1. Параметры из .env ==="
grep -E '^(HAN_PG_HOST|HAN_PG_PORT|KEYCLOAK_DB_)' .env | grep -v PASSWORD || echo "Переменные не найдены!"
# 2. Проверка TCP (используем переменные, а не хардкод)
echo -e "\n=== 2. Проверка TCP (${HAN_PG_HOST}:${HAN_PG_PORT}) ==="
if command -v nc &> /dev/null; then
nc -zv "${HAN_PG_HOST}" "${HAN_PG_PORT}" || echo "❌ Не удалось подключиться по TCP"
else
echo "⚠️ Утилита nc не найдена, пропускаем проверку TCP"
fi
# 3. Проверка подключения psql
echo -e "\n=== 3. Проверка подключения к БД ==="
# ВАЖНО: Передаем пароль через переменную окружения, чтобы скрипт не зависал!
# Если KEYCLOAK_DB_PASSWORD пуст, psql все равно спросит его вручную.
export PGPASSWORD="${KEYCLOAK_DB_PASSWORD:-}"
# Проверяем, установлен ли psql
if ! command -v psql &> /dev/null; then
echo "❌ Утилита psql не найдена на хост-машине. Установите postgresql-client."
exit 1
fi
# Выполняем запрос. Используем переменную порта и добавляем fallback для sslrootcert, если он не задан
psql "host=${HAN_PG_HOST} port=${HAN_PG_PORT} dbname=han_chat user=${KEYCLOAK_DB_USERNAME} sslmode=verify-full sslrootcert=${PG_CA_HOST_PATH:-}" \
-c "SELECT current_user, current_schema(); SHOW search_path;"
# Очищаем пароль из окружения после выполнения (хорошая практика)
unset PGPASSWORD