Script para respaldar una base de datos PostgreSQL en local

Script para respaldar una base de datos PostgreSQL en local
Photo by Lute / Unsplash

Supongamos que tienes una base de datos PostgreSQL en un server al que tienes acceso vía SSH y que deseas de vez en cuando bajarla para trabajar en local con datos reales.

Este script te ayudará a realizar el respaldo y restauración en local de manera ultra rápida.

#!/bin/bash

# Función para generar timestamp
timestamp() {
  date +"%Y%m%d_%H%M%S"
}

# Valores por defecto
DEFAULT_SSH_USER="osiel"
DEFAULT_SSH_IP="192.168.1.100"
DEFAULT_DB_USER="postgres"
DEFAULT_DB_NAME="mi_basedatos"
DEFAULT_BACKUP_FILE="respaldo"

# Función para leer input con valor por defecto
read_with_default() {
  local prompt="$1"
  local default="$2"
  read -p "$prompt [$default]: " input
  echo "${input:-$default}"
}

# Leer datos con valores por defecto
SSH_USER=$(read_with_default "Usuario SSH" "$DEFAULT_SSH_USER")
SSH_IP=$(read_with_default "IP del servidor SSH" "$DEFAULT_SSH_IP")
DB_USER=$(read_with_default "Usuario de la base de datos remota" "$DEFAULT_DB_USER")
DB_NAME=$(read_with_default "Nombre de la base de datos remota" "$DEFAULT_DB_NAME")
BACKUP_FILE=$(read_with_default "Prefijo para nombre del archivo de respaldo" "$DEFAULT_BACKUP_FILE")

# Generar nombre final del respaldo
FULL_BACKUP_FILE="${BACKUP_FILE}_$(timestamp).sql"

echo "Conectando al servidor remoto y generando respaldo..."
ssh ${SSH_USER}@${SSH_IP} "pg_dump -U ${DB_USER} -d ${DB_NAME}" > ${FULL_BACKUP_FILE}

if [ $? -eq 0 ]; then
  echo "✅ Respaldo completado: ${FULL_BACKUP_FILE}"
else
  echo "❌ Error al generar el respaldo. Verifica tus credenciales y conexión SSH."
  exit 1
fi

# Preguntar si desea restaurar
read -p "¿Deseas restaurar este respaldo en tu base local? (s/n): " RESTORE_CONFIRM

if [[ "$RESTORE_CONFIRM" =~ ^[sS]$ ]]; then
  read -p "Nombre de la base de datos local a restaurar: " LOCAL_DB
  echo "Iniciando restauración en la base local '${LOCAL_DB}'..."
  psql -U postgres -d ${LOCAL_DB} -f ${FULL_BACKUP_FILE}

  if [ $? -eq 0 ]; then
    echo "✅ Restauración completada."
  else
    echo "❌ Error al restaurar el respaldo."
  fi
else
  echo "Respaldo almacenado localmente. No se realizó restauración."
fi

Simplemente guarda este archivo como .sh y procede a ejecutarlo cada que necesites un respaldo, para ello iremos a la ruta donde lo has guardado:

cd /ruta/del/script

Y luego dale permisos de ejecución al archivo:

chmod +x backup_postgres_remote.sh

Finalmente ejecutalo:

./backup_postgres_remote.sh

Subscribe to OssprO Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe