#!/bin/bash # Aplica uma migration SQL num banco do rag-hub como rag_admin. # # Não chame direto — use os wrappers por sistema (`migrate_tigre.sh`, # `migrate_doza.sh`), que já sabem o nome do banco. # # A senha do rag_admin vive só em /docker/rag-hub/.env NA VPS. Este script # lê a senha lá dentro e a entrega ao psql pelo ambiente do processo remoto: # ela nunca aparece na linha de comando, em arquivo local, nem no histórico # do shell — como exige admin/VPS-ACCESS.md § Segurança. # # Uso: migrate.sh set -euo pipefail VPS="root@179.197.228.240" DB="$1" SCHEMA="$2" SQL_FILE="$3" if [ ! -f "$SQL_FILE" ]; then echo "[rag] migration nao encontrada: $SQL_FILE" >&2 exit 1 fi echo "[rag] aplicando $(basename "$SQL_FILE") em $DB (como rag_admin)..." # O SQL vai por stdin do ssh; a senha é resolvida no lado remoto. ssh "$VPS" " set -e cd /docker/rag-hub PGPASSWORD=\$(grep -E '^POSTGRES_PASSWORD=' .env | cut -d= -f2-) \ docker exec -i -e PGPASSWORD rag-hub-db \ psql -v ON_ERROR_STOP=1 -U rag_admin -d $DB -f - " < "$SQL_FILE" echo "[rag] migration aplicada. Indices agora no schema $SCHEMA:" ssh "$VPS" " cd /docker/rag-hub PGPASSWORD=\$(grep -E '^POSTGRES_PASSWORD=' .env | cut -d= -f2-) \ docker exec -i -e PGPASSWORD rag-hub-db \ psql -U rag_admin -d $DB -c \"SELECT indexname FROM pg_indexes WHERE schemaname='$SCHEMA' ORDER BY 1;\" "