#!/bin/sh # Restore a pg_dump backup (plaintext *.sql.gz or encrypted *.sql.gz.enc). # # DESTRUCTIVE: dumps are taken with --clean --if-exists, so restoring drops and # recreates objects before loading. Take a fresh backup first if in doubt. # # Usage (from the project root): # docker compose exec backup sh /scripts/db-restore.sh /backups/wpsuite-YYYYMMDD-HHMMSSZ.sql.gz.enc # For an encrypted (.enc) file, BACKUP_ENC_PASSPHRASE must be set (it is, in the # backup container's environment). set -eu FILE="${1:?usage: db-restore.sh }" PGHOST="${PGHOST:-db}" PGPORT="${PGPORT:-5432}" DB="${POSTGRES_DB:?POSTGRES_DB is required}" DB_USER="${POSTGRES_USER:?POSTGRES_USER is required}" export PGPASSWORD="${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}" [ -f "$FILE" ] || { echo "[db-restore] no such file: $FILE" >&2; exit 1; } echo "[db-restore] restoring ${FILE} -> ${DB}@${PGHOST} (this OVERWRITES current data)" case "$FILE" in *.enc) : "${BACKUP_ENC_PASSPHRASE:?BACKUP_ENC_PASSPHRASE is required to decrypt ${FILE}}" openssl enc -d -aes-256-cbc -pbkdf2 -pass env:BACKUP_ENC_PASSPHRASE -in "$FILE" \ | gunzip -c | psql -h "$PGHOST" -p "$PGPORT" -U "$DB_USER" -d "$DB" -v ON_ERROR_STOP=1 ;; *) gunzip -c "$FILE" | psql -h "$PGHOST" -p "$PGPORT" -U "$DB_USER" -d "$DB" -v ON_ERROR_STOP=1 ;; esac echo "[db-restore] done."