mirror of https://github.com/interlegis/sapl.git
Browse Source
* Adiciona script para restaurar a base de dados e migra-lá sem erros Separa comando em funções Finaliza script Adiciona alerta de operação Troca interpretador para facilitar portabilidade Adiciona getopts para pegar parâmetros Adiciona alerta para migração Adiciona mensagem de uso com erro Corrige verificação de parâmetros Corrige confirmação de operação Corrige verificações e criações de diretórios de log Adiciona parada quando há erro na restauração Adiciona criação da role postgres Altera padrão de nome para arquivos de logs Altera nome de função Corrige configuração de parâmetros Altera espaços por \t Altera nomes dos diretórios para as restaurações Adiciona diretório restauracoes no gitignore Adiciona usuário da base de dados Corrige restauração da base de dados Corrige verificação do esquema public Corrige verificação da role postgres * Update scripts/restore_db.sh Co-authored-by: Edward <9326037+edwardoliveira@users.noreply.github.com>pull/3367/head
Vinícius Cantuária
5 years ago
committed by
João Rodrigues
2 changed files with 126 additions and 0 deletions
@ -0,0 +1,124 @@ |
|||
#!/usr/bin/env bash |
|||
# shellcheck disable=SC2086 |
|||
|
|||
ajuda_uso() { |
|||
echo -e "\033[33mUso\033[0m: $0 [-h] -f <caminho-do-dump> [-p <porta-do-banco-de-dados>]" |
|||
echo " -h (Ajuda)" |
|||
echo -e "\tAjuda de uso." |
|||
echo " -f (Arquivo)" |
|||
echo -e "\tCaminho do arquivo do dump." |
|||
echo -e "\tEx.: ~/Downloads/teste.backup" |
|||
echo " -p (Porta)" |
|||
echo -e "\tPorta do banco de dados, valor opcional. De 1 até 65535" |
|||
echo -e "\tValor padrão é 5432." |
|||
} |
|||
|
|||
valida_parametros() { |
|||
if [[ -z $CAMINHO_DUMP ]]; then |
|||
ajuda_uso |
|||
exit 1 |
|||
elif [[ ! -e $CAMINHO_DUMP ]]; then |
|||
echo -e "\033[31mERRO\033[0m Dump não encontrado com o caminho fornecido!" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [[ -z $PORTA ]]; then |
|||
PORTA="5432" |
|||
elif ! [[ $PORTA =~ ^[0-9]+$ ]] || { [[ $PORTA -lt 1 ]] || [[ $PORTA -gt 65535 ]]; }; then |
|||
ajuda_uso |
|||
exit 1 |
|||
fi |
|||
} |
|||
|
|||
confirma_operacao() { |
|||
echo -e "\033[33mALERTA\033[0m\t\tEsta operação apagará todo o conteúdo da base de dados atual e restaurará o dump!" |
|||
while ! [[ $ESCOLHA =~ ^[sSyYnN]+$ ]]; do |
|||
read -rp " Deseja continuar? " ESCOLHA |
|||
done |
|||
|
|||
[[ $ESCOLHA =~ ^[nN]+$ ]] && exit 0 |
|||
} |
|||
|
|||
cria_diretorio_restauracoes() { |
|||
echo -e "\n\033[33mEXECUÇÃO\033[0m\tCriando diretório $BASE_DIR/restauracoes/\033[1mrestauracao_${HORARIO}\033[0m ..." |
|||
if mkdir -p $BASE_DIR/restauracoes/restauracao_${HORARIO} &>/dev/null; then |
|||
echo -e "\033[32mSUCESSO\033[0m\t\tDiretório \033[1mrestauracao_${HORARIO}\033[0m criado.\n" |
|||
else |
|||
echo -e "\033[31mERRO\033[0m\t\tNão foi possível criar o diretório \033[1mrestauracao_${HORARIO}\033[0m." |
|||
exit 1 |
|||
fi |
|||
} |
|||
|
|||
restaura_base_de_dados() { |
|||
echo -e "\033[33mEXECUÇÃO\033[0m [1/2] Restaurando a base de dados..." |
|||
|
|||
HAS_SCHEMA_PUBLIC=$(psql $PGURL -tAc "SELECT 1 FROM information_schema.schemata WHERE schema_name='public'") |
|||
if [[ -n $HAS_SCHEMA_PUBLIC ]]; then |
|||
if ! psql $PGURL -c "DROP SCHEMA public CASCADE;"\ |
|||
&> $BASE_DIR/restauracoes/restauracao_${HORARIO}/restauracao_$DUMP.log; then |
|||
echo -e "\033[31mERRO\033[0m\t\tHouve um erro no banco de dados." |
|||
exit 1 |
|||
fi |
|||
fi |
|||
|
|||
HAS_ROLE_POSTGRES=$(psql $PGURL -tAc "SELECT 1 FROM pg_roles WHERE rolname='postgres'") |
|||
if [[ -z $HAS_ROLE_POSTGRES ]]; then |
|||
psql $PGURL -c "CREATE ROLE postgres;"\ |
|||
>> $BASE_DIR/restauracoes/restauracao_${HORARIO}/restauracao_$DUMP.log 2>&1 |
|||
fi |
|||
|
|||
if ! pg_restore -d $PGURL -e $CAMINHO_DUMP\ |
|||
>> $BASE_DIR/restauracoes/restauracao_${HORARIO}/restauracao_$DUMP.log 2>&1; then |
|||
echo -e "\033[31mERRO\033[0m\t\tHouve um erro ao tentar restaurar a base de dados." |
|||
exit 1 |
|||
fi |
|||
echo -e "\033[32mSUCESSO\033[0m\t\tRestauração concluida.\n" |
|||
} |
|||
|
|||
gera_relatorio_base_de_dados() { |
|||
echo -e "\033[33mEXECUÇÃO\033[0m [2/2] Criando relatório da base de dados restaurada com \033[1m$DUMP\033[0m..." |
|||
psql $PGURL -P pager=off -c " |
|||
SELECT relname as tabelas, |
|||
n_live_tup as qntd_de_registros |
|||
FROM pg_stat_user_tables |
|||
ORDER BY relname ASC, |
|||
n_live_tup DESC; |
|||
" &> $BASE_DIR/restauracoes/restauracao_${HORARIO}/relatorio_$DUMP.log |
|||
echo -e "\033[32mSUCESSO\033[0m\t\tRelatório concluida.\n" |
|||
} |
|||
|
|||
alerta_migracao() { |
|||
echo -e "\033[33mALERTA\033[0m\t\tExecute a migração da base de dados com o comando \033[1mpython3 manage.py migrate\033[0m." |
|||
} |
|||
|
|||
|
|||
HORARIO=$(date +'%Y-%m-%d_%H-%M-%S') |
|||
|
|||
while getopts "h f: p:" opcao; do |
|||
case $opcao in |
|||
h)ajuda_uso |
|||
exit;; |
|||
f)CAMINHO_DUMP="$OPTARG";; |
|||
p)PORTA="$OPTARG";; |
|||
*)ajuda_uso |
|||
exit 1;; |
|||
esac |
|||
done |
|||
|
|||
valida_parametros |
|||
confirma_operacao |
|||
|
|||
BASE_DIR=${PWD%/scripts} |
|||
DUMP=${CAMINHO_DUMP##*/} |
|||
|
|||
PGUSER=${PGUSER:-"sapl"} |
|||
PGPASSWORD=${PGPASSWORD:-"sapl"} |
|||
PGHOST=${PGHOST:-"localhost"} |
|||
PGPORT=${PORTA:-"5432"} |
|||
PGDATABASE=${PGDATABASE:-"sapl"} |
|||
PGURL="postgresql://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$PGDATABASE" |
|||
|
|||
cria_diretorio_restauracoes |
|||
restaura_base_de_dados |
|||
gera_relatorio_base_de_dados |
|||
alerta_migracao |
Loading…
Reference in new issue