#!/usr/bin/env python3 """ Inspect current data in Supabase database """ import psycopg2 import json def inspect_supabase_data(): """Inspect all data currently stored in Supabase""" print("=" * 70) print("SUPABASE DATABASE INSPECTION") print("=" * 70) connection_string = "postgresql://supabase_admin:CzkaYmRvc26Y@localhost:5435/postgres" try: conn = psycopg2.connect(connection_string) cursor = conn.cursor() # Get all tables in vecs schema print("šŸ“Š All tables in vecs schema:") cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_schema = 'vecs';") tables = cursor.fetchall() table_names = [t[0] for t in tables] print(f" Tables: {table_names}") for table_name in table_names: print(f"\nšŸ” Inspecting table: {table_name}") try: # Get table structure cursor.execute(f""" SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema = 'vecs' AND table_name = %s ORDER BY ordinal_position; """, (table_name,)) columns = cursor.fetchall() print(" Table structure:") for col in columns: print(f" - {col[0]}: {col[1]} (nullable: {col[2]})") # Get record count cursor.execute(f'SELECT COUNT(*) FROM vecs."{table_name}";') count = cursor.fetchone()[0] print(f" Record count: {count}") if count > 0: # Get sample records cursor.execute(f""" SELECT id, metadata, CASE WHEN vec IS NOT NULL THEN 'Vector present' ELSE 'No vector' END as vec_status FROM vecs."{table_name}" LIMIT 5; """) records = cursor.fetchall() print(" Sample records:") for i, record in enumerate(records): record_id = record[0] metadata = record[1] if record[1] else {} vec_status = record[2] print(f" Record {i+1}:") print(f" ID: {record_id}") print(f" Vector: {vec_status}") if isinstance(metadata, dict): print(f" Metadata keys: {list(metadata.keys())}") if 'user_id' in metadata: print(f" User ID: {metadata['user_id']}") if 'content' in metadata: content = metadata['content'][:100] + "..." if len(str(metadata['content'])) > 100 else metadata['content'] print(f" Content: {content}") if 'created_at' in metadata: print(f" Created: {metadata['created_at']}") else: print(f" Metadata: {metadata}") print() except Exception as e: print(f" āŒ Error inspecting {table_name}: {e}") # Summary statistics print("\nšŸ“Š SUMMARY:") total_records = 0 for table_name in table_names: try: cursor.execute(f'SELECT COUNT(*) FROM vecs."{table_name}";') count = cursor.fetchone()[0] total_records += count print(f" {table_name}: {count} records") except: print(f" {table_name}: Error getting count") print(f" Total records across all tables: {total_records}") # Check for different users print("\nšŸ‘„ USER ANALYSIS:") for table_name in table_names: try: cursor.execute(f""" SELECT metadata->>'user_id' as user_id, COUNT(*) as count FROM vecs."{table_name}" WHERE metadata->>'user_id' IS NOT NULL GROUP BY metadata->>'user_id' ORDER BY count DESC; """) users = cursor.fetchall() if users: print(f" {table_name} users:") for user, count in users: print(f" - {user}: {count} memories") else: print(f" {table_name}: No user data found") except Exception as e: print(f" Error analyzing users in {table_name}: {e}") cursor.close() conn.close() print("\n" + "=" * 70) print("šŸŽ‰ DATABASE INSPECTION COMPLETE") print("=" * 70) except Exception as e: print(f"āŒ Inspection failed: {str(e)}") import traceback traceback.print_exc() if __name__ == "__main__": inspect_supabase_data()