Motivado por esse post ( http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro ) resolvi fazer algumas adaptações para atender as minhas especificações.
Eu preciso ter backup do servidor inteiro mais não necessáriamente preciso retornar todas as bases para o novo servidor novamente, por esse motivo fiz o meu próprio script para resolver esse problema.
Utilizando a linguagem python associada aos aplicativos do postgresql montei esta rotina.
#!/usr/bin/env python
#! -*- coding:utf8 -*-
########################################################
# Script para fazer o pg_dump de todos os
# bancos da máquina em que ele for executado
# Valdinei dos Santos
# valdineidossantos(at)gmail.com.br
# 27 Julho de 2009
########################################################
#Importando o getstatusoutput responsavel por executar os comandos do sistema operacional
from commands import getstatusoutput
from datetime import datetime
from os import path
#config
psql="/usr/bin/psql"
pg_dump="/usr/bin/pg_dump"
user="pguser-vale"
host="valdineidossantos.com"
repository = "/media/backup/databases/"
#Functions
def getAllDatabases(psql, user, host):
print "\nRecuperando as bases de dados do servidor %s" % host
command = "%s -U %s -h %s -l" % (psql, user, host)
status, output = getstatusoutput ( command )
if int(status) == 0:
#return lista de servidores
return stringToListServers( output )
else:
return [[],]
def stringToListServers( databaseString ):
print "\nFormatando a string"
temp_pieces = databaseString.split("\n")
dataBases = []
for i in temp_pieces[3:]:
try:
pieces = i.split("|")
owner = pieces[1].strip()
dbName = pieces[0].strip()
encode = pieces[2].strip()
data = [dbName, encode, owner]
if data:
dataBases.append ( data )
except Exception, e:
continue
#print e.__doc__
return dataBases
#Init
if __name__ == '__main__':
allDataBases = getAllDatabases(psql, user, host)
day = datetime.now().strftime("%Y%m%d")
for database, encode, owner in allDataBases:
#name Example databasename-20092707.dump
dumpName = "%s-%s.dump" % (database, day)
#/dev/null/databasename-20092707.dump
file = path.join(repository, dumpName)
command = "%s -U %s -h %s -E %s -f %s -i -Fc %s " % (pg_dump, user, host, encode, file, database)
status, output = getstatusoutput( command)
if int(status) > 0:
print "Erro no backup da database %s\n %s" % (database, output)
Após esse script finalizado teremos no diretorio que foi setado no config “repository” todos os bancos de dados disponiveis no servidor.
Para voltar novamente com a base dados para o novo servidor rodamos o comando.
pg_restore -d |nome da base dados| -Fc |caminho/nome do arquivo dump|
Temos algumas outras opções em shell script mas preferi usar o python :)


#1 by Francisco Souza on julho 27th, 2009
Quote
Salve salve Valdinei. Gostei pra caramba do script
Publica ele no VOL também hehe
Forte abraço e parabéns pelo blog!
#2 by Rafael Henter on julho 27th, 2009
Quote
Dinei,
Segue um script parecido so que em ShellScript:
#/usr/local/bin/bash PSQL=`which psql` GREP=`which grep` AWK=`which awk` PGDUMP=`which pg_dump` # Informacoes sobre banco DBHOST='localhost' # IP do Host que deseja backupear PGUSER='pguser' # Usuario do Postgres que vc utiliza PGPORT='5432' # Porta do Postgres que vc utiliza - Default 5432 for bancos in `$PSQL -U $PGUSER -h $DBHOST -l | $GREP pguser | $AWK '{print$1}'` do DUMP_FILE="/tmp/123/dump${bancos}.dump" echo "Backup :"${bancos} $PGDUMP -d $bancos -h $DBHOST -p $PGPORT -U $PGUSER -Fc -f $DUMP_FILE echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++" done