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.")