Spaces:
Sleeping
Sleeping
| """ | |
| Скрипт для детальной проверки состояния properties в БД | |
| """ | |
| import psycopg2 | |
| DB_CONFIG = { | |
| 'host': 'dpg-d5ht8vi4d50c739akh2g-a.virginia-postgres.render.com', | |
| 'port': 5432, | |
| 'database': 'lead_exchange_bk', | |
| 'user': 'lead_exchange_bk_user', | |
| 'password': '8m2gtTRBW0iAr7nY2Aadzz0VcZBEVKYM' | |
| } | |
| try: | |
| conn = psycopg2.connect(**DB_CONFIG) | |
| cursor = conn.cursor() | |
| print("=" * 70) | |
| print("DETAILED PROPERTIES CHECK") | |
| print("=" * 70) | |
| # Проверяем общее количество | |
| cursor.execute("SELECT COUNT(*) FROM properties") | |
| total = cursor.fetchone()[0] | |
| print(f"\n📊 Total properties: {total}") | |
| # Проверяем по owner_user_id | |
| cursor.execute(""" | |
| SELECT owner_user_id, COUNT(*) | |
| FROM properties | |
| GROUP BY owner_user_id | |
| ORDER BY COUNT(*) DESC | |
| """) | |
| print(f"\n👥 Properties by owner:") | |
| for owner_id, count in cursor.fetchall(): | |
| print(f" {owner_id}: {count} properties") | |
| # Проверяем, существуют ли эти пользователи | |
| print(f"\n🔍 Checking if owners exist in users table:") | |
| cursor.execute(""" | |
| SELECT p.owner_user_id, u.email, u.role, COUNT(p.property_id) as prop_count | |
| FROM properties p | |
| LEFT JOIN users u ON p.owner_user_id = u.user_id | |
| GROUP BY p.owner_user_id, u.email, u.role | |
| """) | |
| for owner_id, email, role, count in cursor.fetchall(): | |
| if email: | |
| print(f" ✅ {owner_id[:8]}... → {email} ({role}) - {count} props") | |
| else: | |
| print(f" ❌ {owner_id[:8]}... → USER NOT FOUND! - {count} props (will be deleted on cascade)") | |
| # Проверяем ограничения (constraints) | |
| print(f"\n🔗 Foreign key constraints on properties:") | |
| cursor.execute(""" | |
| SELECT | |
| tc.constraint_name, | |
| tc.constraint_type, | |
| kcu.column_name, | |
| ccu.table_name AS foreign_table_name, | |
| ccu.column_name AS foreign_column_name, | |
| rc.delete_rule | |
| FROM information_schema.table_constraints AS tc | |
| JOIN information_schema.key_column_usage AS kcu | |
| ON tc.constraint_name = kcu.constraint_name | |
| JOIN information_schema.constraint_column_usage AS ccu | |
| ON ccu.constraint_name = tc.constraint_name | |
| LEFT JOIN information_schema.referential_constraints AS rc | |
| ON tc.constraint_name = rc.constraint_name | |
| WHERE tc.table_name = 'properties' AND tc.constraint_type = 'FOREIGN KEY' | |
| """) | |
| for constraint_name, constraint_type, column, foreign_table, foreign_column, delete_rule in cursor.fetchall(): | |
| print(f" {column} → {foreign_table}.{foreign_column}") | |
| print(f" Delete rule: {delete_rule}") | |
| # Показываем примеры объектов | |
| print(f"\n📄 Sample properties (first 5):") | |
| cursor.execute(""" | |
| SELECT property_id, title, owner_user_id, created_at | |
| FROM properties | |
| ORDER BY created_at DESC | |
| LIMIT 5 | |
| """) | |
| for prop_id, title, owner_id, created in cursor.fetchall(): | |
| print(f" - {title[:50]}...") | |
| print(f" ID: {prop_id}") | |
| print(f" Owner: {owner_id}") | |
| print(f" Created: {created}") | |
| # Проверяем пользователя f4e8f58b... | |
| print(f"\n🔍 Checking specific admin user (f4e8f58b-94f4-4e0f-bd85-1b06b8a3f242):") | |
| cursor.execute(""" | |
| SELECT user_id, email, role, first_name, last_name | |
| FROM users | |
| WHERE user_id = 'f4e8f58b-94f4-4e0f-bd85-1b06b8a3f242' | |
| """) | |
| result = cursor.fetchone() | |
| if result: | |
| print(f" ✅ User exists: {result[1]} ({result[2]}) - {result[3]} {result[4]}") | |
| else: | |
| print(f" ❌ User NOT FOUND! This is why properties are being deleted!") | |
| print(f" ℹ️ Properties reference a user that doesn't exist") | |
| print("\n" + "=" * 70) | |
| cursor.close() | |
| conn.close() | |
| except Exception as e: | |
| print(f"❌ Error: {e}") | |
| import traceback | |
| traceback.print_exc() | |