From ed20bb1c7666a9896195f5c07ab4e05fd32b83fc Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Mon, 16 Jun 2025 14:43:25 -0500 Subject: [PATCH] =?UTF-8?q?Automatisches=20l=C3=B6schen=20der=20Autoincrem?= =?UTF-8?q?ent=20Sequenzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wipe-database.bash | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/wipe-database.bash b/wipe-database.bash index b25a5c46..cc4c0305 100644 --- a/wipe-database.bash +++ b/wipe-database.bash @@ -9,6 +9,22 @@ 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!" @@ -21,9 +37,11 @@ if [[ "$USER_CONFIRMATION" != "$REQUIRED_CONFIRMATION" ]]; then exit 1 fi -echo "📦 Backup wird erstellt..." -docker exec -t "$CONTAINER_NAME" pg_dumpall -c -U "$DB_USER" | brotli > "$FILE_NAME" -echo "✅ Backup abgeschlossen: $FILE_NAME" +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..." @@ -34,6 +52,7 @@ DECLARE r RECORD; sql TEXT := ''; BEGIN + -- Truncate all tables FOR r IN SELECT tablename FROM pg_tables @@ -42,7 +61,16 @@ BEGIN sql := sql || FORMAT('TRUNCATE TABLE public.%I CASCADE;', r.tablename); END LOOP; - EXECUTE sql; + -- 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