56 lines
1.5 KiB
Bash
56 lines
1.5 KiB
Bash
#!/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..."
|
|
|
|
# Generate and run TRUNCATE statements for all tables in the public schema
|
|
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." |