-- Complete permission check for a userSELECT pe.name as entity, pa.role, pa.permissions, pcr.display_name as custom_roleFROM partner_affiliations paJOIN partner_entities pe ON pa.entity_id = pe.idLEFT JOIN partner_custom_roles pcr ON pa.role = pcr.role_nameWHERE pa.partner_user_id = 'USER_ID';
-- Student interactions by partner entitySELECT pe.name, COUNT(DISTINCT ssi.student_id) as unique_students, COUNT(*) as total_interactions, COUNT(CASE WHEN ssi.liked = true THEN 1 END) as likes, COUNT(CASE WHEN ssi.disliked = true THEN 1 END) as dislikesFROM student_school_interactions ssiJOIN partner_entities pe ON ssi.partner_entity_id = pe.idWHERE ssi.interaction_date > NOW() - INTERVAL '30 days'GROUP BY pe.id, pe.nameORDER BY unique_students DESC;
-- Check authentication attemptsSELECT id, user_email, ip_address, created_at, CASE WHEN raw_data->>'event_message' LIKE '%Invalid%' THEN 'Invalid Password' WHEN raw_data->>'event_message' LIKE '%not found%' THEN 'User Not Found' ELSE raw_data->>'event_message' END as error_typeFROM auth.audit_log_entriesWHERE user_email = 'partner@example.com'AND created_at > NOW() - INTERVAL '24 hours'ORDER BY created_at DESC;
-- Find affiliations without valid entitiesSELECT pa.*FROM partner_affiliations paWHERE NOT EXISTS ( SELECT 1 FROM partner_entities pe WHERE pe.id = pa.entity_id);-- Find entities without organizationsSELECT pe.*FROM partner_entities peWHERE pe.organization_id IS NOT NULLAND NOT EXISTS ( SELECT 1 FROM partner_organizations po WHERE po.id = pe.organization_id);
-- Make user admin of their entityUPDATE partner_affiliationsSET role = 'admin', permissions = '{"all": true}'::jsonbWHERE partner_user_id = 'USER_ID'AND entity_id = 'ENTITY_ID';
Always verify the WHERE clause before running UPDATE queries. Consider wrapping in a transaction:
Copy
Ask AI
BEGIN;-- Your update query here-- Check affected rowsROLLBACK; -- or COMMIT if correct
-- Daily active partnersSELECT DATE(created_at) as date, COUNT(DISTINCT partner_user_id) as active_partnersFROM messagesWHERE sender_type = 'partner'AND created_at > NOW() - INTERVAL '30 days'GROUP BY DATE(created_at)ORDER BY date DESC;-- Support ticket metricsSELECT category, priority, AVG(EXTRACT(EPOCH FROM (resolved_at - created_at))/3600) as avg_hours_to_resolve, COUNT(*) as ticket_countFROM support_ticketsWHERE created_at > NOW() - INTERVAL '30 days'GROUP BY category, priorityORDER BY priority, category;
For text searches, use ILIKE for case-insensitive matching:
Copy
Ask AI
WHERE email ILIKE '%example%' -- GoodWHERE email LIKE '%example%' -- Case-sensitive
2
Check Before Updating
Always SELECT first to verify your WHERE clause:
Copy
Ask AI
-- First, check what will be affectedSELECT * FROM table WHERE condition;-- Then update if correctUPDATE table SET column = value WHERE condition;
3
Use Transactions
For critical updates, use transactions:
Copy
Ask AI
BEGIN;UPDATE partner_entities SET show_in_app = true WHERE id = 'XXX';-- Verify: SELECT * FROM partner_entities WHERE id = 'XXX';COMMIT; -- or ROLLBACK if wrong
4
Save Common Queries
Keep frequently used queries in a personal document for quick access
Pro tip: The Supabase SQL editor has query history. Use it to find queries you’ve run before!