From ccbcf5c6be69186a3cb7cfb0b6c1c39601905a30 Mon Sep 17 00:00:00 2001 From: Youssef Date: Fri, 4 Sep 2026 08:55:11 +0200 Subject: [PATCH] fix(backup): clean UAT schema before restore and add --no-owner --no-privileges to pg_dump --- scripts/backup_db.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/backup_db.sh b/scripts/backup_db.sh index 088f530..c7f56a5 100755 --- a/scripts/backup_db.sh +++ b/scripts/backup_db.sh @@ -88,11 +88,11 @@ if [ "$STATUS" = "SUCCESS" ]; then # Vérification si le conteneur Docker est actif if command -v docker >/dev/null 2>&1 && docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then log "Mode détection: Conteneur Docker '${CONTAINER_NAME}' trouvé. Utilisation de pg_dump via docker exec." - docker exec -e PGPASSWORD="${DB_PASSWORD}" "${CONTAINER_NAME}" pg_dump -U "${DB_USER}" -d "${DB_NAME}" | gzip > "$DUMP_PATH" 2>> "$LOG_FILE" + docker exec -e PGPASSWORD="${DB_PASSWORD}" "${CONTAINER_NAME}" pg_dump --no-owner --no-privileges -U "${DB_USER}" -d "${DB_NAME}" | gzip > "$DUMP_PATH" 2>> "$LOG_FILE" DUMP_EXIT_CODE=${PIPESTATUS[0]} else log "Mode détection: Exécution directe de pg_dump (hôte local)." - PGPASSWORD="${DB_PASSWORD}" pg_dump -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" | gzip > "$DUMP_PATH" 2>> "$LOG_FILE" + PGPASSWORD="${DB_PASSWORD}" pg_dump --no-owner --no-privileges -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" | gzip > "$DUMP_PATH" 2>> "$LOG_FILE" DUMP_EXIT_CODE=${PIPESTATUS[0]} fi @@ -110,6 +110,8 @@ fi if [ "$STATUS" = "SUCCESS" ] && [ "$ENABLE_UAT_RESTORE" = "true" ]; then log "Démarrage de la restauration et l'anonymisation sur UAT (${UAT_DB_USER}@${UAT_DB_HOST}:${UAT_DB_PORT}/${UAT_DB_NAME})..." + CLEAN_SCHEMA_SQL="DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public; GRANT ALL ON SCHEMA public TO ${UAT_DB_USER}; GRANT ALL ON SCHEMA public TO public;" + ANONYMIZE_SQL=" UPDATE adherent SET nom = 'Nom_Adherent_' || id, @@ -145,7 +147,10 @@ UPDATE educateur SET RESTORE_SUCCESS=false if command -v psql >/dev/null 2>&1; then - log "Restauration UAT via psql local..." + log "Réinitialisation du schéma public sur UAT..." + PGPASSWORD="${UAT_DB_PASSWORD}" psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$CLEAN_SCHEMA_SQL" >> "$LOG_FILE" 2>&1 + + log "Restauration du dump Prod vers UAT..." if gunzip -c "$DUMP_PATH" | PGPASSWORD="${UAT_DB_PASSWORD}" psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" >> "$LOG_FILE" 2>&1; then log "Exécution des requêtes d'anonymisation sur UAT..." if PGPASSWORD="${UAT_DB_PASSWORD}" psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$ANONYMIZE_SQL" >> "$LOG_FILE" 2>&1; then @@ -153,7 +158,10 @@ UPDATE educateur SET fi fi elif command -v docker >/dev/null 2>&1; then - log "Restauration UAT via conteneur Docker postgres..." + log "Réinitialisation du schéma public sur UAT via Docker..." + docker run --rm --net=host -e PGPASSWORD="${UAT_DB_PASSWORD}" postgres:15-alpine psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$CLEAN_SCHEMA_SQL" >> "$LOG_FILE" 2>&1 + + log "Restauration du dump Prod vers UAT via Docker..." if gunzip -c "$DUMP_PATH" | docker run --rm -i --net=host -e PGPASSWORD="${UAT_DB_PASSWORD}" postgres:15-alpine psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" >> "$LOG_FILE" 2>&1; then log "Exécution des requêtes d'anonymisation sur UAT via Docker..." if docker run --rm --net=host -e PGPASSWORD="${UAT_DB_PASSWORD}" postgres:15-alpine psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$ANONYMIZE_SQL" >> "$LOG_FILE" 2>&1; then