Script Reindex PostgreSQL com envio de email de notificação
Pessoal em bancos de dados que ha muitos
inserts é sempre bom fazer um
reindex no banco com direito a envio de email, com isso criei um script para agilizar o processo, principalmente se for mais de um banco como no meu caso.
# nano reindex_pg.sh
Cole o seguinte conteúdo:
#!/bin/bash
script_dir="/diretorio_script/script/"
echo " " > $script_dir/reindex.log
echo "Subject: Reindex" > $script_dir/reindex.log
echo "From: Servidor Banco de dados " >> $script_dir/reindex.log
echo "" >> $script_dir/reindex.log
echo "`date` - Fazendo reindex do servidor..." >> $script_dir/reindex.log
LISTA_BANCO="banco1 banco2 banco3"
for banco in $LISTA_BANCO
do
su - postgres -c "reindexdb -U postgres -w -d $banco"
touch reindex-$banco\ -\ `date +%H:%M`
done
ls -tr reindex-* >> $script_dir/reindex.log
echo " " >> $script_dir/reindex.log
echo " " >> $script_dir/reindex.log
ssmtp voce@exemplo.com.br < $script_dir/reindex.log
rm -f reindex-*
Salve, e mude o arquivo para executável:
# chmod +x reindex_pg.sh
Pode-se ainda agendá-lo para execução automática, adicionando no contrab. Exemplo:
# nano /etc/crontab
Cole a linha:
00 22 * * * root /diretorio_script/script/reindex_pg.sh
Obs.: Para ser enviado o email o
ssmtp tem que estar devidamente configurado, aqui no site tem vários tópicos sobre o assunto.
Outras dicas deste autor
Verificar triggers desabilitadas no PostgreSQL
Ubuntu 11.04 - Placa wireless parou de funcionar com o kernel 2.6.39.x?
Resolvendo waiting ou idle transaction no PostgreSQL
Autovacuum do PostgreSQL
Leitura recomendada
PostgreSQL no Fedora 18
Mudando encoding do Postgres 8.4 para LATIN1
Evitando erros ao indexar campos timestamp em SQL
Consulta aleatória com PostgreSQL
Modelagem de bancos de dados
Comentários
Segue versão adaptada uma vez que tive problemas em executar o reindex conforme codificado no script original (era necessário informar a senha do usuário postgres) e para não precisar me preocupar em futuras manutenções no script (incluir novas bases de dados ou remover bases de dados dropadas).
----------------------------
#!/bin/bash
script_dir="/diretorio_script/script/"
echo " " > $script_dir/reindex.log
echo "Subject: Reindex" > $script_dir/reindex.log
echo "From: Servidor Banco de dados " >> $script_dir/reindex.log
echo "" >> $script_dir/reindex.log
echo "`date` - Fazendo reindex do servidor..." >> $script_dir/reindex.log
LISTA_BANCO="`psql -t -c "select datname from pg_database"`"
for banco in $LISTA_BANCO
do
`reindexdb -U postgres -w -d $banco`
touch reindex-$banco\ -\ `date +%H:%M:%S`
done
ls -tr reindex-* >> $script_dir/reindex.log
echo " " >> $script_dir/reindex.log
echo " " >> $script_dir/reindex.log
ssmtp voce@exemplo.com.br < $script_dir/reindex.log
rm -f reindex-*
Contribuir com comentário
Enviar