import asyncio import os from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text from dotenv import load_dotenv load_dotenv() # Cím beállítása raw_url = os.getenv("DATABASE_URL") if not raw_url: raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder" DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder") async def inspect_schema(): print(f"🔎 Kapcsolódás az adatbázishoz...") engine = create_async_engine(DATABASE_URL) async with engine.begin() as conn: # SQL lekérdezés a rendszer katalógusból (information_schema) # Ez megmondja milyen táblák és oszlopok léteznek query = text(""" SELECT table_schema, table_name, column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema IN ('public', 'ref', 'data') ORDER BY table_schema, table_name, ordinal_position; """) result = await conn.execute(query) rows = result.fetchall() if not rows: print("⚠️ Nem találtam táblákat a 'ref' vagy 'data' sémákban!") current_table = "" for row in rows: schema = row.table_schema table = row.table_name full_table_name = f"{schema}.{table}" # Ha új táblához érünk, kiírjuk a nevét if full_table_name != current_table: print(f"\n📦 TÁBLA: {full_table_name.upper()}") print("-" * 50) print(f"{'OSZLOP NÉV':<20} | {'TÍPUS':<15} | {'KÖTELEZŐ?'}") print("-" * 50) current_table = full_table_name # Oszlop adatok req = "IGEN" if row.is_nullable == 'NO' else "nem" print(f"{row.column_name:<20} | {row.data_type:<15} | {req}") await engine.dispose() if __name__ == "__main__": asyncio.run(inspect_schema())