2026-05-13 14:42:45 +08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
|
cd "$ROOT_DIR"
|
|
|
|
|
|
|
|
|
|
if [[ "${1:-}" != "--force" || -z "${2:-}" ]]; then
|
|
|
|
|
echo "用法: bash scripts/restore.sh --force <backup.sql|backup.sql.gz>" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
BACKUP_FILE="$2"
|
|
|
|
|
if [[ ! -f "$BACKUP_FILE" ]]; then
|
|
|
|
|
echo "备份文件不存在: $BACKUP_FILE" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2026-05-30 16:38:38 +08:00
|
|
|
while IFS= read -r kv; do export "$kv"; done < <("$ROOT_DIR/scripts/load_project_env.sh" ".env.local")
|
|
|
|
|
while IFS= read -r kv; do key="${kv%%=*}"; [[ -n "$key" && -n "${!key:-}" ]] && continue; export "$kv"; done < <("$ROOT_DIR/scripts/load_project_env.sh" ".env")
|
2026-05-13 14:42:45 +08:00
|
|
|
|
|
|
|
|
DB_URL="${DATABASE_URL:-host=/var/run/postgresql dbname=llm_intelligence user=long sslmode=disable}"
|
|
|
|
|
|
|
|
|
|
echo "开始恢复到目标数据库..."
|
|
|
|
|
psql "$DB_URL" -v ON_ERROR_STOP=1 -c "DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public;"
|
|
|
|
|
|
|
|
|
|
if [[ "$BACKUP_FILE" == *.gz ]]; then
|
|
|
|
|
gzip -dc "$BACKUP_FILE" | psql "$DB_URL" -v ON_ERROR_STOP=1
|
|
|
|
|
else
|
|
|
|
|
psql "$DB_URL" -v ON_ERROR_STOP=1 -f "$BACKUP_FILE"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "恢复完成: $BACKUP_FILE"
|