#!/usr/bin/env python3 """ 데이터베이스 정리 - 문제가 되는 테이블들 제거 """ import sqlite3 import os from datetime import datetime def clean_database(): """문제가 되는 테이블들 제거""" db_path = '/srv/headscale-setup/data/db.sqlite' backup_path = f'/srv/headscale-setup/data/db.sqlite.clean_backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}' print("🧹 데이터베이스 정리 - 문제 테이블 제거") print("=" * 50) # 백업 생성 print(f"📦 백업 생성: {backup_path}") import shutil shutil.copy2(db_path, backup_path) # 데이터베이스 연결 conn = sqlite3.connect(db_path) cursor = conn.cursor() try: # 외래키 제약조건 비활성화 cursor.execute("PRAGMA foreign_keys = OFF") # 문제가 되는 테이블들 확인 cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%pharmacy%'") problem_tables = cursor.fetchall() print(f"🎯 제거할 테이블들: {[table[0] for table in problem_tables]}") # 테이블들 제거 for table in problem_tables: table_name = table[0] print(f"🗑️ 테이블 제거: {table_name}") cursor.execute(f"DROP TABLE IF EXISTS {table_name}") # monitoring_data, machine_specs 등도 제거 (필요시) additional_tables = ['monitoring_data', 'machine_specs'] for table_name in additional_tables: cursor.execute(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}'") if cursor.fetchone(): print(f"🗑️ 추가 테이블 제거: {table_name}") cursor.execute(f"DROP TABLE IF EXISTS {table_name}") # 변경사항 커밋 conn.commit() # 남은 테이블 확인 cursor.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name") remaining_tables = cursor.fetchall() print(f"✅ 남은 테이블들: {[table[0] for table in remaining_tables]}") # 무결성 검사 cursor.execute("PRAGMA integrity_check") integrity = cursor.fetchone()[0] print(f"🔍 무결성 검사: {integrity}") print("✅ 데이터베이스 정리 완료!") print(f"📦 백업 위치: {backup_path}") except Exception as e: print(f"❌ 오류: {e}") conn.rollback() raise finally: conn.close() if __name__ == '__main__': clean_database()