#!/bin/sh # Restaure un dump dans une base jetable et compare les comptages à la base source. # C'est ce script qui fait la différence entre "on a des fichiers" et "on a des sauvegardes". set -eu FILE=${1:?usage: restore-check.sh } CONTAINER=${CONTAINER:-myim_postgres} DB=${POSTGRES_DATABASE:-my_info_mate} DB_USER=${POSTGRES_USER:-mym} SCRATCH="restore_check_$(date -u +%s)" psql_scratch() { docker exec "$CONTAINER" psql -qtAX --username="$DB_USER" --dbname="$1" -c "$2"; } docker exec "$CONTAINER" createdb --username="$DB_USER" "$SCRATCH" trap 'docker exec "$CONTAINER" dropdb --username="$DB_USER" --if-exists "$SCRATCH"' EXIT docker exec -i "$CONTAINER" pg_restore \ --username="$DB_USER" --dbname="$SCRATCH" --no-owner --no-privileges < "$FILE" TABLES=$(psql_scratch "$DB" "select tablename from pg_tables where schemaname='public' order by tablename") printf '%-28s %10s %10s\n' TABLE SOURCE RESTORE echo "$TABLES" | while read -r t; do [ -n "$t" ] || continue a=$(psql_scratch "$DB" "select count(*) from public.\"$t\"") b=$(psql_scratch "$SCRATCH" "select count(*) from public.\"$t\"") if [ "$a" = "$b" ]; then mark=""; else mark=" <-- ECART"; fi printf '%-28s %10s %10s%s\n' "$t" "$a" "$b" "$mark" done