notebookvb

This commit is contained in:
Administrator
2026-05-23 09:38:53 +02:00
parent 13065aab94
commit 916ab42bcc
13 changed files with 1085 additions and 194 deletions
+65 -24
View File
@@ -1,12 +1,28 @@
#!/bin/bash
# ==============================================================================
# PostgreSQL Verify Backup Integrity — ověření konzistence po restore
# ==============================================================================
#
# CO DĚLÁ:
# Připojí se k PostgreSQL 18 a pro každou databázi zkontroluje:
# 1. Konektivitu k serveru
# 2. Seznam všech databází
# 3. Pro každou DB: počet tabulek, počty řádků, velikosti, počet indexů
# 4. PostgreSQL role a uživatele
#
# KDY POUŽÍT:
# Po provedení postgresqlrestore_from_backup.sh — ověří, že data jsou v pořádku.
# Spouštět ručně, není součástí automatizovaného schedule.
#
# VÝSTUP:
# OK / ERROR indikátory, tabulky se statistikami.
# Skript vrátí exit code 1 pokud cokoliv selže.
# ==============================================================================
set -x
# ==========================================================
# VERIFY BACKUP INTEGRITY
# Kontroluje že se všechny DB, tabulky a data
# správně obnovily po restore
# ==========================================================
# ==============================================================================
# KONFIGURACE
# ==============================================================================
CONTAINER_NAME="postgresql18"
PG_HOST="localhost"
PG_PORT="5432"
@@ -18,9 +34,11 @@ echo "=========================================="
ALL_OK=true
# ==========================================================
# 1. CONNECTIVITY CHECK
# ==========================================================
# ==============================================================================
# 1. KONEKTIVITA
# Jednoduchý SELECT 'connected' — pokud selže, PostgreSQL není dostupný
# a nemá smysl pokračovat.
# ==============================================================================
echo ""
echo "Checking PostgreSQL connectivity..."
docker exec \
@@ -40,9 +58,12 @@ if [ $? -ne 0 ]; then
fi
echo "OK: Connected to PostgreSQL"
# ==========================================================
# 2. LIST ALL DATABASES
# ==========================================================
# ==============================================================================
# 2. SEZNAM DATABÁZÍ
# pg_database: systémová tabulka s metadaty databází.
# datistemplate=false: vynechá šablonové DB (template0, template1).
# Výsledek jde nejdřív na stdout (pro přehled), pak do proměnné pro iteraci.
# ==============================================================================
echo ""
echo "Databases present:"
docker exec \
@@ -56,7 +77,8 @@ docker exec \
--tuples-only \
--command="SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname;"
# Ulož seznam DB do proměnné pro iteraci
# Znovu spustíme dotaz pro iteraci — ukládáme do proměnné.
# tr -d ' ': odstraní bílé znaky z výstupu psql (odsazení sloupce).
DATABASES=$(docker exec \
-e PGPASSWORD="$PGPASSWORD" \
"$CONTAINER_NAME" \
@@ -69,17 +91,21 @@ DATABASES=$(docker exec \
--command="SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname;" \
| tr -d ' ')
# ==========================================================
# 3. PER-DATABASE CHECKS
# ==========================================================
# ==============================================================================
# 3. KONTROLA KAŽDÉ DATABÁZE
# ==============================================================================
for DB_NAME in $DATABASES; do
[ -z "$DB_NAME" ] && continue
[ -z "$DB_NAME" ] && continue # přeskoč prázdné řádky z výstupu psql
echo ""
echo "Verifying database: $DB_NAME"
echo "------------------------------------------"
# Počet tabulek
# --------------------------------------------------------------------------
# Počet tabulek v public schema
# information_schema.tables: standardní SQL pohled, table_schema='public'
# filtruje jen uživatelské tabulky (ne systémové views).
# --------------------------------------------------------------------------
TABLE_COUNT=$(docker exec \
-e PGPASSWORD="$PGPASSWORD" \
"$CONTAINER_NAME" \
@@ -94,7 +120,12 @@ for DB_NAME in $DATABASES; do
echo "OK: Tables in public schema: $TABLE_COUNT"
# Seznam tabulek s počtem řádků
# --------------------------------------------------------------------------
# Tabulky s počtem řádků a velikostí
# pg_stat_user_tables: statistiky o uživatelských tabulkách (live tuples, dead tuples).
# n_live_tup: odhadovaný počet živých řádků (ANALYZE musí být aktuální).
# pg_total_relation_size: celková velikost incl. indexy a TOAST.
# --------------------------------------------------------------------------
echo " Table row counts:"
docker exec \
-e PGPASSWORD="$PGPASSWORD" \
@@ -113,7 +144,11 @@ SELECT
FROM pg_stat_user_tables
ORDER BY relname;"
# Počet indexů
# --------------------------------------------------------------------------
# Počet indexů v public schema
# pg_indexes: systémový katalog indexů. Slouží jako ověření, že
# pg_dumpall správně obnovil i CREATE INDEX příkazy (ne jen data).
# --------------------------------------------------------------------------
INDEX_COUNT=$(docker exec \
-e PGPASSWORD="$PGPASSWORD" \
"$CONTAINER_NAME" \
@@ -128,7 +163,10 @@ ORDER BY relname;"
echo "OK: Indexes in public schema: $INDEX_COUNT"
# Celková velikost DB
# --------------------------------------------------------------------------
# Celková velikost databáze
# pg_database_size: vrátí velikost v bytech, pg_size_pretty ji naformátuje.
# --------------------------------------------------------------------------
DB_SIZE=$(docker exec \
-e PGPASSWORD="$PGPASSWORD" \
"$CONTAINER_NAME" \
@@ -145,9 +183,12 @@ ORDER BY relname;"
done
# ==========================================================
# 4. CHECK ROLES / USERS
# ==========================================================
# ==============================================================================
# 4. ROLE A UŽIVATELÉ
# pg_roles: systémový katalog všech rolí.
# Filtrujeme pryč built-in pg_* role (pg_monitor, pg_read_all_settings, atd.)
# aby výstup byl přehledný — zajímají nás jen uživatelské role.
# ==============================================================================
echo ""
echo "PostgreSQL roles:"
docker exec \