-- Schema Inventory Query -- Outputs sorted lists of all schema objects for comparison -- Used to verify migration collapse produces identical schema \echo '=== TABLES ===' SELECT table_name, column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_schema = 'public' ORDER BY table_name, ordinal_position; \echo '=== PRIMARY KEYS ===' SELECT tc.table_name, kcu.column_name FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = 'public' ORDER BY tc.table_name, kcu.ordinal_position; \echo '=== FOREIGN KEYS ===' SELECT tc.table_name, kcu.column_name, ccu.table_name AS foreign_table, ccu.column_name AS foreign_column FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'public' ORDER BY tc.table_name, kcu.column_name; \echo '=== INDEXES ===' SELECT tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'public' ORDER BY tablename, indexname; \echo '=== CHECK CONSTRAINTS ===' SELECT tc.table_name, tc.constraint_name, cc.check_clause FROM information_schema.table_constraints tc JOIN information_schema.check_constraints cc ON tc.constraint_name = cc.constraint_name AND tc.constraint_schema = cc.constraint_schema WHERE tc.constraint_type = 'CHECK' AND tc.table_schema = 'public' AND tc.constraint_name NOT LIKE '%_not_null' ORDER BY tc.table_name, tc.constraint_name; \echo '=== UNIQUE CONSTRAINTS ===' SELECT tc.table_name, tc.constraint_name, STRING_AGG(kcu.column_name, ', ' ORDER BY kcu.ordinal_position) as columns FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema WHERE tc.constraint_type = 'UNIQUE' AND tc.table_schema = 'public' GROUP BY tc.table_name, tc.constraint_name ORDER BY tc.table_name, tc.constraint_name; \echo '=== VIEWS ===' SELECT table_name, view_definition FROM information_schema.views WHERE table_schema = 'public' ORDER BY table_name; \echo '=== FUNCTIONS ===' SELECT routine_name, routine_type, data_type as return_type FROM information_schema.routines WHERE routine_schema = 'public' ORDER BY routine_name; \echo '=== TRIGGERS ===' SELECT trigger_name, event_object_table, action_timing, event_manipulation, action_statement FROM information_schema.triggers WHERE trigger_schema = 'public' ORDER BY event_object_table, trigger_name; \echo '=== ENUM TYPES ===' SELECT t.typname as enum_name, STRING_AGG(e.enumlabel, ', ' ORDER BY e.enumsortorder) as enum_values FROM pg_type t JOIN pg_enum e ON t.oid = e.enumtypid JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = 'public' GROUP BY t.typname ORDER BY t.typname; \echo '=== DOMAINS ===' SELECT domain_name, data_type, domain_default, character_maximum_length FROM information_schema.domains WHERE domain_schema = 'public' ORDER BY domain_name; \echo '=== TABLE COMMENTS ===' SELECT c.relname as table_name, d.description FROM pg_class c JOIN pg_description d ON c.oid = d.objoid AND d.objsubid = 0 JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'public' AND c.relkind = 'r' ORDER BY c.relname; \echo '=== COLUMN COMMENTS ===' SELECT c.relname as table_name, a.attname as column_name, d.description FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_description d ON c.oid = d.objoid AND a.attnum = d.objsubid JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'public' AND a.attnum > 0 ORDER BY c.relname, a.attnum;