veza/veza-stream-server/scripts/apply_migrations_lab.sh

89 lines
3 KiB
Bash
Executable file

#!/bin/bash
# Script pour appliquer les migrations SQL sur la base de données de labo
# Usage: ./scripts/apply_migrations_lab.sh
set -e
# Couleurs pour les messages
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# DSN de la base de données de labo
VEZA_LAB_DSN="${VEZA_LAB_DSN:-postgres://veza:veza_password@localhost:5432/veza_lab?sslmode=disable}"
echo -e "${GREEN}📦 Application des migrations sur veza_lab...${NC}"
echo -e "${YELLOW}DSN: ${VEZA_LAB_DSN}${NC}"
echo ""
# Vérifier que psql est disponible
if ! command -v psql &> /dev/null; then
echo -e "${RED}❌ psql n'est pas installé. Installez PostgreSQL client.${NC}"
exit 1
fi
# Extraire les composants de l'URL pour psql
# Format: postgres://user:password@host:port/database?params
if [[ $VEZA_LAB_DSN =~ postgres://([^:]+):([^@]+)@([^:]+):([^/]+)/([^?]+) ]]; then
DB_USER="${BASH_REMATCH[1]}"
DB_PASS="${BASH_REMATCH[2]}"
DB_HOST="${BASH_REMATCH[3]}"
DB_PORT="${BASH_REMATCH[4]}"
DB_NAME="${BASH_REMATCH[5]}"
else
echo -e "${RED}❌ Format de DSN invalide: ${VEZA_LAB_DSN}${NC}"
exit 1
fi
# Exporter le mot de passe pour psql
export PGPASSWORD="${DB_PASS}"
# Répertoire des migrations
MIGRATIONS_DIR="$(dirname "$0")/../migrations"
if [ ! -d "$MIGRATIONS_DIR" ]; then
echo -e "${RED}❌ Répertoire migrations non trouvé: ${MIGRATIONS_DIR}${NC}"
exit 1
fi
# Appliquer les migrations dans l'ordre
echo -e "${GREEN}🔧 Application des migrations...${NC}"
for migration_file in "$MIGRATIONS_DIR"/*.sql; do
if [ -f "$migration_file" ]; then
migration_name=$(basename "$migration_file")
echo -e "${YELLOW}${migration_name}${NC}"
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$migration_file" > /dev/null 2>&1; then
echo -e "${GREEN} ✅ Migration appliquée${NC}"
else
# Vérifier si l'erreur est due à "already exists" (OK)
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$migration_file" 2>&1 | grep -q "already exists"; then
echo -e "${YELLOW} ⚠️ Tables déjà existantes (OK)${NC}"
else
echo -e "${RED} ❌ Erreur lors de l'application${NC}"
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$migration_file"
exit 1
fi
fi
fi
done
echo ""
echo -e "${GREEN}✅ Toutes les migrations ont été appliquées${NC}"
# Vérifier que les tables existent
echo ""
echo -e "${GREEN}🔍 Vérification des tables créées...${NC}"
TABLES=$(psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('stream_jobs', 'stream_segments');")
if [ "$TABLES" -eq "2" ]; then
echo -e "${GREEN}✅ Tables stream_jobs et stream_segments présentes${NC}"
else
echo -e "${YELLOW}⚠️ Certaines tables peuvent être manquantes (vérifiez manuellement)${NC}"
fi
# Nettoyer
unset PGPASSWORD