- Base de datos PostgreSQL 16 con extensiones JSONB y arrays - Docker Compose para containerización - Scripts SQL de inicialización (schema, funciones, índices, datos de prueba) - Suite de tests de validación (18 tests) - Queries de ejemplo (17 queries) - Script helper para gestión (scripts/riocata.sh) - Documentación completa en README.md Estructura: - 4 tablas principales: sesion, auth.users, sesion_participante, muestra, evaluacion - Tipo ENUM para defectos - 2 triggers automáticos (updated_at, puntaje_final) - 19 índices de optimización (GIN, B-tree, funcionales) - Constraints de validación para arrays y JSONB - 2 funciones auxiliares para análisis
168 lines
4.2 KiB
Bash
Executable File
168 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# rioCata - Script de ayuda para gestión de la base de datos
|
|
|
|
set -e
|
|
|
|
COMPOSE="docker-compose"
|
|
DB_USER="riocata_user"
|
|
DB_NAME="riocata"
|
|
|
|
# Colores
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
function show_help() {
|
|
echo "rioCata - Sistema de Catación de Café"
|
|
echo ""
|
|
echo "Uso: ./riocata.sh [comando]"
|
|
echo ""
|
|
echo "Comandos disponibles:"
|
|
echo " start - Iniciar servicios"
|
|
echo " stop - Detener servicios"
|
|
echo " restart - Reiniciar servicios"
|
|
echo " reset - Reiniciar servicios y borrar datos (¡CUIDADO!)"
|
|
echo " psql - Conectarse a PostgreSQL con psql"
|
|
echo " test - Ejecutar tests de validación"
|
|
echo " queries - Ejecutar queries de ejemplo"
|
|
echo " logs - Ver logs de PostgreSQL"
|
|
echo " status - Ver estado de servicios"
|
|
echo " backup - Crear backup de la base de datos"
|
|
echo " restore FILE - Restaurar backup desde archivo"
|
|
echo " help - Mostrar esta ayuda"
|
|
echo ""
|
|
}
|
|
|
|
function start_services() {
|
|
echo -e "${GREEN}Iniciando servicios...${NC}"
|
|
$COMPOSE up -d
|
|
echo -e "${GREEN}Esperando que PostgreSQL esté listo...${NC}"
|
|
sleep 3
|
|
$COMPOSE ps
|
|
}
|
|
|
|
function stop_services() {
|
|
echo -e "${YELLOW}Deteniendo servicios...${NC}"
|
|
$COMPOSE down
|
|
}
|
|
|
|
function restart_services() {
|
|
echo -e "${YELLOW}Reiniciando servicios...${NC}"
|
|
$COMPOSE restart
|
|
sleep 3
|
|
$COMPOSE ps
|
|
}
|
|
|
|
function reset_all() {
|
|
echo -e "${RED}¡ADVERTENCIA! Esto borrará TODOS los datos.${NC}"
|
|
read -p "¿Estás seguro? (escribe 'SI' para confirmar): " confirm
|
|
if [ "$confirm" = "SI" ]; then
|
|
echo -e "${RED}Eliminando servicios y datos...${NC}"
|
|
$COMPOSE down -v
|
|
echo -e "${GREEN}Reiniciando servicios...${NC}"
|
|
$COMPOSE up -d
|
|
sleep 5
|
|
echo -e "${GREEN}Base de datos reinicializada con datos de prueba.${NC}"
|
|
else
|
|
echo -e "${YELLOW}Operación cancelada.${NC}"
|
|
fi
|
|
}
|
|
|
|
function connect_psql() {
|
|
echo -e "${GREEN}Conectando a PostgreSQL...${NC}"
|
|
echo -e "${YELLOW}Tip: usa \\q para salir${NC}"
|
|
$COMPOSE exec postgres psql -U $DB_USER -d $DB_NAME
|
|
}
|
|
|
|
function run_tests() {
|
|
echo -e "${GREEN}Ejecutando tests de validación...${NC}"
|
|
$COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < postgres/tests/test_all.sql
|
|
}
|
|
|
|
function run_queries() {
|
|
echo -e "${GREEN}Ejecutando queries de ejemplo...${NC}"
|
|
$COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < postgres/tests/example_queries.sql
|
|
}
|
|
|
|
function show_logs() {
|
|
echo -e "${GREEN}Mostrando logs de PostgreSQL...${NC}"
|
|
$COMPOSE logs -f postgres
|
|
}
|
|
|
|
function show_status() {
|
|
echo -e "${GREEN}Estado de servicios:${NC}"
|
|
$COMPOSE ps
|
|
}
|
|
|
|
function create_backup() {
|
|
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql"
|
|
echo -e "${GREEN}Creando backup en $BACKUP_FILE...${NC}"
|
|
$COMPOSE exec -T postgres pg_dump -U $DB_USER $DB_NAME > $BACKUP_FILE
|
|
echo -e "${GREEN}Backup creado exitosamente: $BACKUP_FILE${NC}"
|
|
}
|
|
|
|
function restore_backup() {
|
|
if [ -z "$1" ]; then
|
|
echo -e "${RED}Error: Debes especificar el archivo de backup${NC}"
|
|
echo "Uso: ./riocata.sh restore <archivo.sql>"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$1" ]; then
|
|
echo -e "${RED}Error: El archivo $1 no existe${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${YELLOW}Restaurando backup desde $1...${NC}"
|
|
$COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < "$1"
|
|
echo -e "${GREEN}Backup restaurado exitosamente${NC}"
|
|
}
|
|
|
|
# Main
|
|
case "${1:-help}" in
|
|
start)
|
|
start_services
|
|
;;
|
|
stop)
|
|
stop_services
|
|
;;
|
|
restart)
|
|
restart_services
|
|
;;
|
|
reset)
|
|
reset_all
|
|
;;
|
|
psql)
|
|
connect_psql
|
|
;;
|
|
test)
|
|
run_tests
|
|
;;
|
|
queries)
|
|
run_queries
|
|
;;
|
|
logs)
|
|
show_logs
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
backup)
|
|
create_backup
|
|
;;
|
|
restore)
|
|
restore_backup "$2"
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
echo -e "${RED}Comando desconocido: $1${NC}"
|
|
echo ""
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|