#!/bin/bash set -e # Config CONTAINER_NAME="database" DB_USER="main" DB_NAME="main" TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") FILE_NAME="backup-$TIMESTAMP.sql.br" # Wir holen uns den parameter --skip-backup, um zu entscheiden, ob wir ein Backup machen wollen SKIP_BACKUP=false while [[ $# -gt 0 ]]; do case $1 in --skip-backup) SKIP_BACKUP=true shift # Remove the argument from the list ;; *) echo "Unbekannter Parameter: $1" exit 1 ;; esac done REQUIRED_CONFIRMATION='Ja, ich möchte alle Daten unwiderruflich löschen.' echo "⚠️ WARNUNG: Diese Aktion wird alle Tabellen und Einträge in der Datenbank vollständig löschen!" echo "Um fortzufahren, tippe exakt: \"$REQUIRED_CONFIRMATION\"" echo read -p "> " USER_CONFIRMATION if [[ "$USER_CONFIRMATION" != "$REQUIRED_CONFIRMATION" ]]; then echo "❌ Falsche Eingabe. Abbruch." exit 1 fi if [[ "$SKIP_BACKUP" == false ]]; then echo "📦 Backup wird erstellt..." docker exec -t "$CONTAINER_NAME" pg_dumpall -c -U "$DB_USER" | brotli --quality=1 > "$FILE_NAME" echo "✅ Backup abgeschlossen: $FILE_NAME" fi echo "🧨 Alle Daten aus allen Tabellen werden gelöscht..." # Erst müssen wir alle Verbindungen zur Datenbank trennen docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" "postgres" <<'EOSQL' SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'main' AND pid <> pg_backend_pid(); EOSQL # Dann löschen wir die Datenbank und erstellen sie neu docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" "postgres" <<'EOSQL' DROP DATABASE IF EXISTS main; CREATE DATABASE main WITH OWNER main ENCODING 'UTF8'; EOSQL echo "✅ Alle Tabellen gelöscht und Schema zurückgesetzt." echo "🚀 Datenbankbereinigung abgeschlossen."