#!/bin/bash # scripts/check-db-connection.sh - Быстрая проверка подключения к БД set -e echo "🔗 Проверка подключения к базе данных..." # Проверка из контейнера web echo "📡 Тест 1: Django ORM подключение..." if docker-compose exec -T web python -c " import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') django.setup() from django.db import connection from django.contrib.auth import get_user_model try: # Тест подключения with connection.cursor() as cursor: cursor.execute('SELECT 1') print('✅ База данных отвечает') # Тест ORM User = get_user_model() user_count = User.objects.count() print(f'✅ Пользователей в системе: {user_count}') # Тест миграций from django.core.management import call_command from io import StringIO out = StringIO() call_command('showmigrations', '--plan', stdout=out) migrations_output = out.getvalue() if '[X]' in migrations_output: print('✅ Миграции применены') else: print('⚠️ Есть неприменённые миграции') except Exception as e: print(f'❌ Ошибка Django: {e}') exit(1) " 2>/dev/null; then echo "✅ Django успешно подключается к БД" else echo "❌ Ошибка подключения Django к БД" exit 1 fi # Прямая проверка PostgreSQL echo "" echo "📡 Тест 2: Прямое подключение к PostgreSQL..." if docker-compose exec -T db pg_isready -U links_user -d links_db; then echo "✅ PostgreSQL готов к подключениям" else echo "❌ PostgreSQL не готов" exit 1 fi # Проверка таблиц echo "" echo "📡 Тест 3: Проверка структуры БД..." if docker-compose exec -T db psql -U links_user -d links_db -c " SELECT schemaname, tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename; " 2>/dev/null; then echo "✅ Таблицы базы данных доступны" else echo "❌ Не удается получить список таблиц" exit 1 fi echo "" echo "✅ Все проверки подключения к БД пройдены успешно!"