47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Check tables in system and gamification schemas.
|
|
"""
|
|
import asyncio
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
from sqlalchemy import text
|
|
|
|
async def check():
|
|
from app.core.config import settings
|
|
engine = create_async_engine(str(settings.SQLALCHEMY_DATABASE_URI))
|
|
|
|
async with engine.begin() as conn:
|
|
# List tables
|
|
result = await conn.execute(text("""
|
|
SELECT table_schema, table_name,
|
|
(SELECT count(*) FROM information_schema.columns c WHERE c.table_schema=t.table_schema AND c.table_name=t.table_name) as column_count
|
|
FROM information_schema.tables t
|
|
WHERE table_name IN ('competitions', 'user_scores')
|
|
ORDER BY table_schema;
|
|
"""))
|
|
rows = result.fetchall()
|
|
print("Tables found:")
|
|
for row in rows:
|
|
print(f" {row.table_schema}.{row.table_name} ({row.column_count} columns)")
|
|
# Count rows
|
|
count_result = await conn.execute(text(f'SELECT COUNT(*) FROM "{row.table_schema}"."{row.table_name}"'))
|
|
count = count_result.scalar()
|
|
print(f" Rows: {count}")
|
|
|
|
# Check foreign keys
|
|
result = await conn.execute(text("""
|
|
SELECT conname, conrelid::regclass as source_table, confrelid::regclass as target_table
|
|
FROM pg_constraint
|
|
WHERE contype = 'f'
|
|
AND (conrelid::regclass::text LIKE '%competitions%' OR conrelid::regclass::text LIKE '%user_scores%'
|
|
OR confrelid::regclass::text LIKE '%competitions%' OR confrelid::regclass::text LIKE '%user_scores%');
|
|
"""))
|
|
fks = result.fetchall()
|
|
print("\nForeign keys involving these tables:")
|
|
for fk in fks:
|
|
print(f" {fk.conname}: {fk.source_table} -> {fk.target_table}")
|
|
|
|
await engine.dispose()
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(check()) |