Agendando Backup do PostgreSQL no Windows

9 Comments

Estava precisando agendar uma rotina de backup para o PostgreSQL no Windows. Depois de algum tempo pesquisando em forums e alguns blogs, vou postar aqui um passo a passo para uma solução bem rápida e simples.

Criando o arquivo:
Crie um arquivo de lote chamado “rotina_backup.bat” e insira os seguintes comandos:

@echo off
for /f “tokens=1,2,3,4 delims=/ ” %%a in (‘DATE /T’) do set hoje=%%b%%c%%d
CD “C:\Arquivos de programas\PostgreSQL\8.1\bin\”
pg_dump -U postgres meu_database > C:\bck_%hoje%.backup
exit

Você deve ter algumas preocupações com o arquivo de lote. A primeira delas é informar onde o arquivo de backup será salvo. Se você deixar o arquivo de lote como está ele criará o backup com seu nome sendo composto pela data atual no diretório “C:” ficando como o seguinte exemplo: “C:\bck_26012008.backup”.
A segunda preocupação é garantir que o arquivo de lote acesse o diretório correto do executável de dump. Se você durante a instalação usou o diretório padrão ele é o seguinte: “C:\Arquivos de programas\PostgreSQL\8.1\bin\”.

Criando a tarefa agendada:
Clique no botão Iniciar – Programas – Acessórios – Ferramentas do sistema – Tarefas agendadas e crie um agendamento para este arquivo de lote.

Caso tenha alguma dúvida de como criar uma tarefa agendada, Clique aqui.

9 comentários (+add yours?)

  1. Marcos Sousa
    Jun 06, 2008 @ 19:03:04

    Olá,

    Eu segui o seu tutorial, porém ele pediu a senha quando eu executo o comando:

    pg_dump -U postgres meu_database > C:\bck_%hoje%.backup

    você tem alguma idéia de como resolver?

  2. igocoelho
    Jun 08, 2008 @ 00:33:18

    Olá Marcos,
    você pode editar o arquivo pg_hba.conf e edite a linha abaixo:

    host all all 127.0.0.1/32 md5

    Mude o md5 por trust e a senha não sera solicitada novamente.

  3. André
    Aug 13, 2008 @ 16:45:08

    Boa tarde, por acaso voce sabe como eu coloco a hora do backup no arquivo gerado pelo backup?

    Faço 2 backups por dia e dessa forma vai sobrepor, não é?

  4. Carlos Jr
    Sep 21, 2009 @ 09:32:43

    Ola Marco, muito legal, funcionou, agora vc poderia mostrar o inverso, para quando ocorrer um erro (espero que nao) e eu poder restaurar o backup

  5. Zanolla
    Dec 17, 2009 @ 13:54:20

    Parceiro o seguinte…

    o laço for da data esta finalizando o meu .bat …

    oq faço?

  6. LEANDRO MOREIRA
    Nov 01, 2010 @ 17:53:23

    AQUI ESTA UMA COPIA QUE USO PARA FAZER BACKUP EM MEUS CLIENTES.

    -OS ARQUIVOS QUE ESTIVEREM NA PASTA BIN DO POSTGRES DEVEM SER COLOCADOS NA PASTA SYSTEM32 PARA QUE O MESMO SEJA EXECUTADO.

    -O FORMATO DE DATA NO WINDOWS TEM DE SER DD/MM/AAAA

    -FAÇA UM ARQUIVO .BAT, DAI AO USUÁRIO CLICAR O MESMO SERA FEITO.

    -CRIE UMA PASTA PARA ONDE O BACKUP SERA FEITO.

    ——————————————————————————

    pg_dump.exe -i -h NOME_DO_SERVIDOR -p 5432 -U postgres -F c -b -v -f “D:\PASTA_DE_BACKUP\NOME_DO_BANCO%date:~0,2%%date:~3,2%%date:~6,4%%time:~0,2%%time:~3,2%.backup” “NOME_DO_BANCO”

    cd\

    copy D:\PASTA_DE_BACKUP\NOME_DO_BANCO%date:~0,2%%date:~3,2%%date:~6,4%*.backup E:\PASTA_DE_BACKUP\
    PAUSE

    ——————————————————————————

    FAZENDO DESTE JEITO, O MESMO SERA CRIADO NA PASTA QUE VC CLIAR, MUDANDO NO ARQUIVO BAT O DESTINO.
    O COMANDO TAMBEM COPIA PARA UM PENDRIVE OU ENTAO UM COMPUTADOR DE REDE QUE VC DESEJAR, BASTA FAZER O DIRECIONAMENTO PARA ONDE A PASTA VAI FICAR.
    NO MEU CASO EU SEMPRE DEIXO CONECTADO UM PENDRIVE E TAMBEM SEMPRE DIRECIONO PARA UM OUTRO COMPUTADOR DA REDE.

    NESTE BACKUP QUE FIZ SEMPRE VAI APARECER O NOME DO BANCO, A DATA, A HORA.
    O COMANDO PARA FAZER A COPIA PARA OUTRO LUGAR SEMPRE COPIARÁ TUDO QUE FOR FEITO NO DIA E NUNCA IRÁ SOBREPOR O ARQUIVO DE BACKUP.

  7. Uálison
    Nov 09, 2010 @ 17:28:58

    Muito bom, parabéns.

  8. Jackson
    May 24, 2011 @ 20:58:37

    LEANDRO MOREIRA
    Muito bom o script que postou!
    Vlw.

  9. Marcelo Brini
    Aug 30, 2011 @ 20:50:11

    Leandro Moreira… parabéns…
    Seu script é sensacional….
    Espero não ter problemas em divulga-lo…

Leave a Reply