@sweetbeems Hier ist eine vorläufige Reihe von Befehlen, die helfen sollten, Ihre Daten wiederherzustellen, und die ich auf meiner Website getestet habe.
Ich gehe davon aus, dass Sie unsere Docker-Installation verwenden und mit der Befehlszeile einigermaßen vertraut sind.
Sie sollten eine Sicherungsdatei unter <site>/admin/backups identifizieren. Es sollte eine sein, die vor der Löschung der Daten erstellt wurde.
Diese Anleitung geht davon aus, dass Ihre Sicherungen Uploads enthalten. Der Unterschied besteht darin, dass die Sicherungsdatei .tar.gz (Daten+Uploads) im Gegensatz zu .sql.gz (nur Daten) wäre.
# Betreten Sie die App mit dem Standardbenutzer
docker exec -it app bash
# Identifizieren Sie die gewünschte Sicherung
ls /var/www/discourse/public/backups/default/
# Extrahieren Sie die Datei dump.sql aus der komprimierten Sicherung
cd /var/www/discourse/public/backups
mkdir site-backup-to-restore
tar xfz ./default/=SITE_BACKUP_FILENAME= -C site-backup-to-restore/
cd site-backup-to-restore
gunzip dump.sql.gz
# Holen Sie sich die Daten
# Dies findet den Anfang der Umfragedaten
# bis zum Ende der Daten (was eine leere Zeile wäre)
start=$(grep -n "COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;" dump.sql | sed 's/\([0-9]*\).*/\1/')
end=$(tail -n +$start dump.sql | grep -m 1 -n ^$ | sed 's/\([0-9]*\).*/\1/')
end=$((end-2))
tail -n +$start dump.sql | head -n $end > poll_votes_dump.sql
# Hier sollten Sie poll_votes_dump.sql überprüfen
cat poll_votes_dump.sql
# Ändern Sie COPY in INSERT, damit
# wir immer noch ON CONFLICT hinzufügen können
sed -i 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}/'\''\&\''\''/g' poll_votes_dump.sql
sed -i '2,$s/\t/,/g' poll_votes_dump.sql
sed -i '2,$s/^/(/; 2,$s/$/),/' poll_votes_dump.sql
sed -i '$ s/,$//' poll_votes_dump.sql
sed -i 's/COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;/INSERT INTO public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at)\nVALUES/' poll_votes_dump.sql
echo "ON CONFLICT DO NOTHING;" >> poll_votes_dump.sql
cat poll_votes_dump.sql
Dies sind die Ergebnisse der `cat`-Befehle
Das erste sollte so aussehen
COPY public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at) FROM stdin;
1 1 1 2023-07-04 05:49:17.031031 2023-07-04 05:49:17.031031
1 4 1 2023-07-04 05:54:01.281801 2023-07-04 05:54:01.281801
und das zweite sollte so aussehen
INSERT INTO public.poll_votes (poll_id, poll_option_id, user_id, created_at, updated_at)
VALUES
(1,1,1,'2023-07-04 05:49:17.031031','2023-07-04 05:49:17.031031'),
(1,4,1,'2023-07-04 05:54:01.281801','2023-07-04 05:54:01.281801')
ON CONFLICT DO NOTHING;
Verlassen Sie die Docker-Instanz und wechseln Sie zum Postgres-Benutzer – Es gibt ein tieferes Problem, das ich hier nicht behandeln werde und das diesen zusätzlichen Aufwand erfordert.
# Greifen Sie von Ihrem Host aus über den Postgres-Benutzer auf die App zu
docker exec --user postgres -it app bash
# Einfügen
psql -U postgres -d discourse -f /var/www/discourse/public/backups/site-backup-to-restore/poll_votes_dump.sql
# Sie sollten `INSERT 0 3928` oder die Anzahl der wiederhergestellten Umfrageabstimmungen sehen