#!/bin/bash # Скрипт для подготовки PostgreSQL базы данных для Lottery Bot # Использует настройки из .env файла set -e echo "🗄️ Подготовка PostgreSQL базы данных для Lottery Bot..." # Загружаем переменные из .env if [ -f .env ]; then export $(cat .env | grep -v '^#' | xargs) else echo "❌ Файл .env не найден!" exit 1 fi # Парсим URL базы данных if [[ $DATABASE_URL =~ postgresql\+asyncpg://([^:]+):([^@]+)@([^/]+)/(.+) ]]; then DB_USER="${BASH_REMATCH[1]}" DB_PASS="${BASH_REMATCH[2]}" DB_HOST="${BASH_REMATCH[3]}" DB_NAME="${BASH_REMATCH[4]}" else echo "❌ Неверный формат DATABASE_URL в .env файле" echo "Ожидается: postgresql+asyncpg://user:password@host/database" exit 1 fi echo "📋 Параметры подключения:" echo " Хост: $DB_HOST" echo " Пользователь: $DB_USER" echo " База данных: $DB_NAME" # Функция для выполнения SQL команд run_psql() { PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "$1" -c "$2" } run_psql_admin() { PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "postgres" -c "$1" } # Проверяем подключение к PostgreSQL echo "🔍 Проверка подключения к PostgreSQL..." if ! PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "postgres" -c "SELECT 1;" > /dev/null 2>&1; then echo "❌ Не удалось подключиться к PostgreSQL" echo "Проверьте:" echo " 1. Запущен ли PostgreSQL сервер" echo " 2. Правильность учетных данных в .env" echo " 3. Доступность сервера по адресу $DB_HOST" exit 1 fi echo "✅ Подключение к PostgreSQL успешно" # Создаем базу данных, если она не существует echo "🔨 Создание базы данных '$DB_NAME'..." if run_psql_admin "SELECT 1 FROM pg_database WHERE datname='$DB_NAME';" | grep -q '1'; then echo "ℹ️ База данных '$DB_NAME' уже существует" else run_psql_admin "CREATE DATABASE \"$DB_NAME\" WITH ENCODING='UTF8' LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8';" echo "✅ База данных '$DB_NAME' создана" fi # Создаем расширения echo "🔧 Настройка расширений PostgreSQL..." run_psql "$DB_NAME" "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";" run_psql "$DB_NAME" "CREATE EXTENSION IF NOT EXISTS \"pg_stat_statements\";" echo "✅ Расширения настроены" # Устанавливаем права доступа echo "🔐 Настройка прав доступа..." run_psql "$DB_NAME" "GRANT CONNECT ON DATABASE \"$DB_NAME\" TO \"$DB_USER\";" run_psql "$DB_NAME" "GRANT USAGE ON SCHEMA public TO \"$DB_USER\";" run_psql "$DB_NAME" "GRANT CREATE ON SCHEMA public TO \"$DB_USER\";" run_psql "$DB_NAME" "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"$DB_USER\";" run_psql "$DB_NAME" "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"$DB_USER\";" # Устанавливаем права по умолчанию run_psql "$DB_NAME" "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO \"$DB_USER\";" run_psql "$DB_NAME" "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO \"$DB_USER\";" echo "✅ Права доступа настроены" echo "🎉 PostgreSQL база данных готова к работе!" echo "" echo "Следующие шаги:" echo " 1. make migrate - применить миграции" echo " 2. make setup - настроить администраторов" echo " 3. make run - запустить бота"