#!/bin/bash # ============================================ # 丹阳公益婚恋服务平台 — PostgreSQL 恢复脚本 # ============================================ # 用法: # ./scripts/restore.sh # ./scripts/restore.sh backups/danyang_match_20260828_143000.sql.gz # ============================================ set -euo pipefail if [ $# -lt 1 ]; then echo "用法: $0 <备份文件路径>" echo "示例: $0 /app/backups/danyang_match_20260828_143000.sql.gz" exit 1 fi BACKUP_FILE="$1" if [ ! -f "${BACKUP_FILE}" ]; then echo "错误: 备份文件不存在: ${BACKUP_FILE}" exit 1 fi DB_NAME="${DB_NAME:-danyang_match}" DB_USER="${DB_USER:-danyang}" DB_HOST="${DB_HOST:-postgres}" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始恢复: ${BACKUP_FILE} -> ${DB_NAME}" echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ 将覆盖现有数据库,请确认!" # 恢复数据 gunzip -c "${BACKUP_FILE}" | psql \ -h "${DB_HOST}" \ -U "${DB_USER}" \ -d "${DB_NAME}" \ --set ON_ERROR_STOP=on echo "[$(date '+%Y-%m-%d %H:%M:%S')] 恢复完成" # 验证 TABLE_COUNT=$(psql -h "${DB_HOST}" -U "${DB_USER}" -d "${DB_NAME}" -tAc \ "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public'") echo "[$(date '+%Y-%m-%d %H:%M:%S')] 验证: 公共 schema 下 ${TABLE_COUNT} 张表"