Expand description
备份/恢复(双模式 + 任务进度)。 备份与恢复(读写,最高风险)。
备份:探测 pg_dump 可用性——可用则子进程生成完整 .sql(--clean --if-exists,
脚本自带 DROP ... IF EXISTS,使恢复幂等),不可用则回退纯 SQL(仅数据)。
备份文件含签名头。
恢复:仅接受本系统生成的备份(签名校验)+ 二次确认 + 路径穿越防护;
psql -v ON_ERROR_STOP=1 确保任何 SQL 错误立即中止并报失败(不再假成功);
成功后全量失效文章缓存与 SSR 世代号。
长耗时操作走后台任务 + 进度轮询(见 crate::api::database::tasks)。
兼容性提示:--clean --if-exists 是后加的备份参数。本修复之前生成的备份
文件不含 DROP,对其执行恢复会在第一条「relation already exists」处中止并报
失败(行为正确,但无法恢复数据)——需重新创建备份才能恢复。
Structs§
- Backup
Info - 备份文件元信息(列表展示用)。
Constants§
- BACKUP_
DIR 🔒 - 备份目录(项目根,与 uploads/ 平级,gitignored)。
- BACKUP_
SIGNATURE 🔒 - 备份文件签名头(恢复时校验,拒绝非本系统文件)。
- FILENAME_
RE 🔒 - 文件名白名单正则:仅字母数字下划线点连字符(防路径穿越)。
Functions§
- backup_
path 🔒 - 构造 backups/ 下的安全路径(额外防御:校验规范化后仍在 BACKUP_DIR 内)。
- create_
backup - 发起备份,立即返回 task_id,后台任务执行。
- delete_
backup - 删除备份文件。
- download_
backup - Axum 处理器:下载备份文件(admin 鉴权 + 路径白名单)。 仅 server 构建:纯 Axum 路由(在 main.rs 注册),无 WASM 消费者。
- has_
valid_ 🔒signature - 校验备份文件首行是否含本系统签名头。 提取为纯函数:把首行(或全文)作为参数传入,便于单测。
- is_
valid_ 🔒backup_ filename - 校验备份文件名是否符合白名单(仅字母数字下划线点连字符)。 返回 true 表示安全可用。提取为纯函数便于单测覆盖路径穿越边界。
- list_
backups - 列出 backups/ 目录下的备份文件元信息。
- parse_
backup_ 🔒mode - 从备份文件全文提取
-- mode: <value>行的值(如 “pg_dump”/“sql-fallback”)。 提取为纯函数:把文件内容作为参数传入,便于单测。 缺失或格式不符返回 “unknown”。 - read_
first_ 🔒line - 仅读取文件首行(用于签名校验,避免把整个备份文件读入内存)。
- read_
first_ 🔒lines - 读取文件前
n行(用于解析-- mode:等头部元信息,避免整文件读入内存)。 不足n行时返回实际读到的行;任一行读取失败则整体返回该错误。 - restore_
backup - 发起恢复:校验签名 + 路径穿越防护 + 二次确认,立即返回 task_id。
- run_
backup 🔒 - 后台执行备份:pg_dump 优先,不可用回退纯 SQL。
- run_
pg_ 🔒dump_ backup - pg_dump 模式:子进程生成完整备份(含 schema),前置签名头。
- run_
restore 🔒 - 后台执行恢复:探测 psql,可用则 psql -f,不可用则报告。
- run_
sql_ 🔒fallback_ backup - 纯 SQL 回退:仅备份数据(不含 schema),按表计数精确进度。