Se están trayendo respaldos de varios lugares, la idea es montarlos en una sola máquina. Son más de 50 respaldos por lo que creé un script para hacer esta tarea.
La idea es que los respaldos tengan un mismo esquema variando solo el número de la BD. Tengo el siguiente código:
Código:
#!/bin/bash
echo 'INICIANDO SCRIPT'
USUARIO='mi_usuario' # El usuario que tendrá permisos sobre las BDs
DIRECTORIO=$1 # Donde se encuentran los archivos SQL de los respaldos. Se tiene que pasar como parámetro.
ARCHIVOS=($(ls -t $DIRECTORIO))
NUMARCHIVOS=${#ARCHIVOS[*]} # Calcula el número de archivos
INDICE=0
echo 'INICIANDO BUCLE'
while [ $INDICE -lt $NUMARCHIVOS ]; do
#echo ${ARCHIVOS[$INDICE]}
if [[ ${ARCHIVOS[$INDICE]} =~ base([0-9]{2})(.*).pgdump ]] # Debe tener el formato baseXX-DD-MM-YYYY.pgdump
then
BASEDATOS='base'${BASH_REMATCH[1]} # El nombre de la Base de Datos
echo '------------- INICIO '$BASEDATOS
dropdb $BASEDATOS # Eliminando 'versiones' anteriores
createdb -E LATIN1 -O $USUARIO $BASEDATOS # Creando...
psql -U $USUARIO -d $BASEDATOS -f $1${ARCHIVOS[$INDICE]} # Montando la BD conrrespondiente
psql -c "ALTER DATABASE $BASEDATOS SET DateStyle TO 'SQL, DMY'" # Cambiando el esquema de fechas
mv $1${ARCHIVOS[$INDICE]} tmp/$1${ARCHIVOS[$INDICE]}
echo $1${ARCHIVOS[$INDICE]}
echo '----------------- FIN '$BASEDATOS
fi
let INDICE++
done
exit 0
el script debe de ser llamado:
script.sh directorio/donde/estan/los/pgdumps/
Funciona: elimina, crea y monta los datos... pero hay un problema al intentar moverlos. Me aparece el siguiente mensaje de error:
Cita: mv: no se puede mover �respaldos/junio2008/base12_10-06-08.pgdump� a �tmp/respaldos/junio2008/base12_10-06-08.pgdump�: No existe el fichero o el directorio
... con todo y esos símbolos. El directorio tmp/ esta en el mismo nivel donde se encuentra el script. Los archivos y el directorio tienen permisos 777.
¿Por qué aparecen dichos símbolos?. Agradezco cualquier comentario u observación sobre mi script (apenas me adentro en Bash por esto). Estoy trabajando con Postgres 8.2.
PD: ¿será posible ejecutar los archivos en órden?.. que ahora los hace salteados; base09, base50, base12, etc.., preferiría fuera base01, base02, base03... etc.