#!/bin/bash set -e # Config CONTAINER_NAME="online-energieausweis-database-1" 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 > "$FILE_NAME" echo "✅ Backup abgeschlossen: $FILE_NAME" fi echo "🧨 Alle Daten aus allen Tabellen werden gelöscht..." # Generate and run TRUNCATE statements for all tables in the public schema docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" "$DB_NAME" <<'EOSQL' DO $$ DECLARE r RECORD; sql TEXT := ''; BEGIN -- Truncate all tables FOR r IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' LOOP sql := sql || FORMAT('TRUNCATE TABLE public.%I CASCADE;', r.tablename); END LOOP; -- Drop all sequences FOR r IN SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public' LOOP sql := sql || FORMAT('DROP SEQUENCE IF EXISTS public.%I CASCADE;', r.sequence_name); END LOOP; EXECUTE sql END $$; EOSQL echo "✅ Alle Tabellen gelöscht und Schema zurückgesetzt." echo "🚀 Datenbankbereinigung abgeschlossen."