Files
34047007@qq.com b95053c52c init: 初始化 dpb 桃育种系统代码库
前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
2026-08-06 00:17:49 +08:00

38 lines
1.4 KiB
Bash

#!/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:-<none>}(指定文件或确认 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}"