Iterace přes všechny databáze na více serverech
Skočit na navigaci
Skočit na vyhledávání
Cílem je identifikovat podezřelé databáze, která v určitém sloupečku učité tabulky obsahují pouze několik málo hodnot. Problémem je množství databází (s různými schématy) a množství databázových serverů.
Kombinací bashe, ssh a psql lze poměrně jednoduše takovou úlohu provést.
Nejdříve potřebujeme skript, který chceme spustit na každém serveru:
su - postgres -c ' for db in `psql -At -c "select datname from pg_database where not datistemplate and datallowconn limit 1000" postgres`; do echo $db; psql -At -c "select current_database(), \$_\$ALERT\$_\$ from pg_stats where attname = \$_\$foo_id\$_\$ and tablename like \$_\$bar%\$_\$ and n_distinct between 0 and 10" $db; psql -At -c "select current_database(), \$_\$OK\$_\$ from pg_stats where attname = \$_\$foo_id\$_\$ and tablename like \$_\$bar%\$_\$ and NOT n_distinct between 0 and 10" $db; done'
Dále potřebuje distribuční skript - skript se pustí na pozadí, vzdálená execuce se pustí paralelně:
for i in dbserver{21..26}; do echo $i; ( ssh -T -o StrictHostKeyChecking=no root@$i < check_pg_cluster.sh & ) ; done > log &