Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
16 lines
678 B
Python
16 lines
678 B
Python
"""Резервная копия файла базы перед пакетом с записями в Jira: VACUUM INTO даёт согласованный снимок при WAL."""
|
||
from datetime import datetime
|
||
from pathlib import Path
|
||
|
||
|
||
def make_backup(conn, backups_dir: Path, label: str, keep: int = 30) -> Path:
|
||
backups_dir = Path(backups_dir)
|
||
backups_dir.mkdir(parents=True, exist_ok=True)
|
||
target = backups_dir / f"{datetime.now():%Y%m%d-%H%M%S-%f}-{label}.sqlite"
|
||
conn.execute("VACUUM INTO ?", (str(target),))
|
||
files = sorted(backups_dir.glob("*.sqlite"))
|
||
if keep > 0:
|
||
for old in files[:-keep]:
|
||
old.unlink()
|
||
return target
|