Spaces:
Running
Running
File size: 2,490 Bytes
afd56bc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import os
import subprocess
import datetime
from dotenv import load_dotenv
# Wczytywanie z .env
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
PINECONE_INDEX_NAME = os.getenv("PINECONE_INDEX_NAME", "dotacje")
def backup_postgres():
"""Tworzy zrzut głównej bazy relacyjnej (Userzy, Projekty, Sesje Wizard, etc.)"""
if not DATABASE_URL or "localhost" in DATABASE_URL:
print("Pomijanie backupu Postgres (używana jest lokalna baza lub baza SQLite).")
return
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
backup_file = f"backup_postgres_{timestamp}.sql"
print(f"Tworzenie zrzutu danych PostgreSQL do pliku: {backup_file}...")
try:
# Standardowe narzędzie pg_dump
subprocess.run(["pg_dump", DATABASE_URL, "-f", backup_file], check=True)
print("✅ Zrzut bazy zakończony sukcesem.")
except Exception as e:
print(f"❌ Błąd podczas zrzutu bazy: {e}")
print(
"Upewnij się, że polecenie 'pg_dump' jest dostępne w systemie (wymaga instalacji PostgreSQL Client)."
)
def backup_pinecone():
"""Tworzy snapshot/Collection z obecnego indeksu Pinecone, gwarantując bezpieczną kopię embeddings."""
if not PINECONE_API_KEY:
print("Pomijanie backupu Pinecone (Brak PINECONE_API_KEY).")
return
print(
f"Tworzenie kopii zapasowej wektorów RAG (Pinecone) z indeksu: {PINECONE_INDEX_NAME}..."
)
try:
from pinecone import Pinecone
pc = Pinecone(api_key=PINECONE_API_KEY)
timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
collection_name = f"{PINECONE_INDEX_NAME}-backup-{timestamp}"
pc.create_collection(name=collection_name, source=PINECONE_INDEX_NAME)
print(
f"✅ Utworzono kopię zapasową indeksu jako Pinecone Collection: '{collection_name}'"
)
except ImportError:
print(
"❌ Brakuje biblioteki 'pinecone-client'. Zainstaluj ją za pomocą: pip install pinecone-client"
)
except Exception as e:
print(f"❌ Błąd podczas tworzenia kolekcji w Pinecone: {e}")
if __name__ == "__main__":
print("====================================")
print(" GRANTFORGE - PROCEDURA BACKUPU")
print("====================================")
backup_postgres()
print("-" * 30)
backup_pinecone()
print("Zakończono w całości.")
|