Files
new_lottery_bot/scripts/setup_postgres.sh
2025-11-16 12:36:02 +09:00

92 lines
3.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 - запустить бота"