Files

44 lines
1.3 KiB
Bash

#!/bin/bash
# ============================================
# 丹阳公益婚恋服务平台 — PostgreSQL 恢复脚本
# ============================================
# 用法:
# ./scripts/restore.sh <backup-file>
# ./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} 张表"