38 lines
1.4 KiB
Bash
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}"
|