#!/bin/bash set -x # ========================================================== # VERIFY BACKUP INTEGRITY # Kontroluje že se všechny DB, tabulky a data # správně obnovily po restore # ========================================================== CONTAINER_NAME="postgresql18" PG_HOST="localhost" PG_PORT="5432" PG_USER="vladimir.buzalka" export PGPASSWORD="Vlado7309208104++" echo "Starting PostgreSQL backup integrity verification..." echo "==========================================" ALL_OK=true # ========================================================== # 1. CONNECTIVITY CHECK # ========================================================== echo "" echo "Checking PostgreSQL connectivity..." docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="postgres" \ --tuples-only \ --command="SELECT 'connected';" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "ERROR: Cannot connect to PostgreSQL!" exit 1 fi echo "OK: Connected to PostgreSQL" # ========================================================== # 2. LIST ALL DATABASES # ========================================================== echo "" echo "Databases present:" docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="postgres" \ --tuples-only \ --command="SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname;" # Ulož seznam DB do proměnné pro iteraci DATABASES=$(docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="postgres" \ --tuples-only \ --command="SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname;" \ | tr -d ' ') # ========================================================== # 3. PER-DATABASE CHECKS # ========================================================== for DB_NAME in $DATABASES; do [ -z "$DB_NAME" ] && continue echo "" echo "Verifying database: $DB_NAME" echo "------------------------------------------" # Počet tabulek TABLE_COUNT=$(docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="$DB_NAME" \ --tuples-only \ --command="SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';" \ | tr -d ' ') echo "OK: Tables in public schema: $TABLE_COUNT" # Seznam tabulek s počtem řádků echo " Table row counts:" docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="$DB_NAME" \ --tuples-only \ --command=" SELECT schemaname || '.' || relname AS table_name, n_live_tup AS estimated_rows, pg_size_pretty(pg_total_relation_size(relid)) AS total_size FROM pg_stat_user_tables ORDER BY relname;" # Počet indexů INDEX_COUNT=$(docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="$DB_NAME" \ --tuples-only \ --command="SELECT COUNT(*) FROM pg_indexes WHERE schemaname = 'public';" \ | tr -d ' ') echo "OK: Indexes in public schema: $INDEX_COUNT" # Celková velikost DB DB_SIZE=$(docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="$DB_NAME" \ --tuples-only \ --command="SELECT pg_size_pretty(pg_database_size('$DB_NAME'));" \ | tr -d ' ') echo "OK: Database size: $DB_SIZE" done # ========================================================== # 4. CHECK ROLES / USERS # ========================================================== echo "" echo "PostgreSQL roles:" docker exec \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="postgres" \ --command="SELECT rolname, rolsuper, rolcreatedb, rolcanlogin FROM pg_roles WHERE rolname NOT LIKE 'pg_%' ORDER BY rolname;" echo "" echo "==========================================" if [ "$ALL_OK" = true ]; then echo "OK: All verifications passed!" else echo "ERROR: Some verifications failed!" exit 1 fi set +x