@sweetbeems voici un ensemble préliminaire de commandes qui devraient vous aider à restaurer vos données, et que j’ai testées sur mon site.
Je suppose que vous utilisez notre installation docker et que vous êtes quelque peu familier avec la ligne de commande.
Vous devriez identifier un fichier de sauvegarde à partir de \u003csite\u003e/admin/backups. Il doit s’agir d’une sauvegarde effectuée avant la suppression des données.
Ce guide suppose que vos sauvegardes incluent les téléchargements. La différence est que le fichier de sauvegarde serait .tar.gz (données+téléchargements) par opposition à .sql.gz (données uniquement).
# entrez dans l'application en utilisant l'utilisateur par défaut
docker exec -it app bash
# identifiez la sauvegarde que vous voulez y trouver
ls /var/www/discourse/public/backups/default/
# extrayez le fichier dump.sql de la sauvegarde compressée
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
# récupérez les données
# ceci trouve le début des données de votes de sondage
# jusqu'à la fin des données (qui serait une ligne vide)
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
# ici, vous voudrez examiner poll_votes_dump.sql
cat poll_votes_dump.sql
# changez le COPY en INSERT afin que
# nous puissions toujours ajouter ON CONFLICT
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
Voici à quoi devraient ressembler les résultats des commandes `cat`
Le premier devrait ressembler à ceci
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
et le second devrait ressembler à ceci
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;
Quittez l’instance docker et passez à l’utilisateur postgres – Il y a un problème plus profond que je n’aborderai pas ici qui nécessite cette étape supplémentaire.
# depuis votre hôte, accédez à l'application via l'utilisateur postgres
docker exec --user postgres -it app bash
# insérer
psql -U postgres -d discourse -f /var/www/discourse/public/backups/site-backup-to-restore/poll_votes_dump.sql
# vous devriez voir `INSERT 0 3928` ou le nombre de votes de sondage qui ont été restaurés