#!/usr/bin/env bash # Atualiza o banco-referência _ref a partir da PRODUÇÃO (VPS3, somente leitura) # e recria _dev a partir dele. Uso: ./pg-dev-refresh.sh set -euo pipefail PROJ="${1:?uso: ./pg-dev-refresh.sh (ex.: scoreodonto)}" cd "$(dirname "$0")" set -a; source ./secrets.env; set +a export XDG_RUNTIME_DIR=/run/user/1000 DOCKER_HOST=unix:///run/user/1000/docker.sock VPS3=10.99.0.3; PGIMG=postgres:18 line=$(grep -E "^[[:space:]]*${PROJ}[[:space:]]*:" pg-dev-projects.conf | head -1 || true) [ -z "$line" ] && { echo "ERRO: '$PROJ' não está em pg-dev-projects.conf"; exit 1; } SRC_DB=$(echo "$line" | awk -F: '{gsub(/[[:space:]]/,"",$2);print $2}') SRC_USER=$(echo "$line"| awk -F: '{gsub(/[[:space:]]/,"",$3);print $3}') pvar="SRC_${PROJ}_PASS"; SRC_PASS="${!pvar:?sem senha SRC_${PROJ}_PASS em secrets.env}" REF="${PROJ}_ref"; DEV="${PROJ}_dev"; W=$(mktemp -d) trap 'rm -rf "$W"' EXIT PSQL(){ docker run --rm --network soc -e PGPASSWORD="$PGDEV_PASSWORD" "$PGIMG" \ psql -h pgdev -U devadmin -d postgres -v ON_ERROR_STOP=1 "$@"; } echo "[1/4] pg_dump de '$SRC_DB' (VPS3 $VPS3, somente leitura)..." docker run --rm -e PGPASSWORD="$SRC_PASS" -v "$W":/w "$PGIMG" \ pg_dump -h "$VPS3" -U "$SRC_USER" -d "$SRC_DB" -Fc -f /w/dump echo "[2/4] recriando $REF..." PSQL -c "DROP DATABASE IF EXISTS $DEV WITH (FORCE);" PSQL -c "DROP DATABASE IF EXISTS $REF WITH (FORCE);" PSQL -c "CREATE DATABASE $REF;" echo "[3/4] restaurando dump em $REF (avisos de owner/postgis são normais)..." docker run --rm --network soc -e PGPASSWORD="$PGDEV_PASSWORD" -v "$W":/w "$PGIMG" \ pg_restore -h pgdev -U devadmin -d "$REF" --no-owner --no-privileges /w/dump || true echo "[4/4] criando $DEV a partir do template $REF..." PSQL -c "CREATE DATABASE $DEV TEMPLATE $REF;" echo "OK: $DEV pronto (origem: $SRC_DB @ VPS3)."