#!/bin/bash # تدریسینو: آزمونِ بازیابی از بکاپِ رمزشده (ماهی یک بار، دستی: sudo -u postgres tadrisino-restore-check). # آخرین بکاپ + همه‌ی WALِ آرشیوشده را در پوشه‌ی موقت بازیابی می‌کند، Postgresِ موقت را روی سوکتِ همان پوشه (بی‌پورتِ شبکه، # archive_mode=off تا چیزی به مخزن ننویسد) بالا می‌آورد، شمارش‌ها را کنارِ دیتابیسِ اصلی چاپ می‌کند و همه را پاک می‌کند. set -euo pipefail BIN=/usr/lib/postgresql/16/bin work=$(mktemp -d /var/lib/postgresql/restore-check.XXXXXX) trap '"$BIN/pg_ctl" -D "$work/data" -m immediate stop >/dev/null 2>&1 || true; rm -rf "$work"' EXIT pgbackrest --stanza=zareian --pg1-path="$work/data" --type=default --archive-mode=off restore --log-level-console=warn cat > "$work/data/postgresql.conf" < "$work/data/pg_hba.conf" "$BIN/pg_ctl" -D "$work/data" -l "$work/log" -w -t 600 start >/dev/null for _ in $(seq 120); do [ "$(psql -h "$work" -p 5499 -d zareian_mathapp -Atc 'select pg_is_in_recovery()')" = f ] && break; sleep 1 done Q="select 'users', count(*) from accounts_user union all select 'questions', count(*) from content_question union all select 'orders', count(*) from payment_order union all select 'payment_events', count(*) from payment_paymentevent union all select 'login_events', count(*) from accounts_loginevent" echo "restored | live" paste -d'|' <(psql -h "$work" -p 5499 -d zareian_mathapp -Atc "$Q") <(psql -p 5440 -d zareian_mathapp -Atc "$Q" | cut -d'|' -f2)