62 lines
2.1 KiB
Python
Executable File
62 lines
2.1 KiB
Python
Executable File
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())
|