#!/usr/bin/env bash # ============================================================ # 桃育种 Postgres 恢复(批3 备份容灾) # - pg_restore 恢复自定义格式(-Fc)备份 # - 默认恢复 Temp/backup/ 最新一份,或显式指定 dump 文件 # 用法: bash pg_restore.sh [dump_file] # 覆盖: DB_HOST/DB_PORT/DB_USER/DB_NAME/PGPASSWORD/BACKUP_DIR # 注意: --clean --if-exists 会先清空目标库同名对象,仅用于容灾恢复演练/重建。 # ============================================================ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" BACKUP_DIR="${BACKUP_DIR:-${PROJECT_ROOT}/Temp/backup}" DB_HOST="${DB_HOST:-localhost}" DB_PORT="${DB_PORT:-5432}" DB_USER="${DB_USER:-dpb}" DB_NAME="${DB_NAME:-dpb}" PGPASSWORD="${PGPASSWORD:-dpb}" export PGPASSWORD DUMP="${1:-}" if [ -z "${DUMP}" ]; then DUMP="$(ls -t "${BACKUP_DIR}"/pg_*.dump 2>/dev/null | head -1 || true)" fi if [ -z "${DUMP}" ] || [ ! -f "${DUMP}" ]; then echo "未找到备份文件: ${DUMP:-}(指定文件或确认 Temp/backup/ 下有备份)" >&2 exit 1 fi if ! pg_restore -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" \ --clean --if-exists --no-owner --no-privileges "${DUMP}" >/dev/null 2>&1; then echo "恢复失败: ${DUMP}" >&2 exit 1 fi echo "恢复完成: ${DUMP}"