\set ON_ERROR_STOP on \if :{?app_role} \else \set app_role vignette \endif DO $$ DECLARE relation_count INT; rls_count INT; append_guard_count INT; policy_count INT; BEGIN SELECT count(*) INTO relation_count FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'app' AND c.relname = ANY(ARRAY[ 'practice_prescription_submission', 'practice_coaching_card', 'practice_prescription', 'practice_episode_submission', 'practice_attempt_evidence', 'competency_graph_snapshot', 'practice_curriculum_decision_event', 'practice_teacher_correction' ]); IF relation_count <> 8 THEN RAISE EXCEPTION 'expected 8 G4 relations, found %', relation_count; END IF; SELECT count(*) INTO rls_count FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'app' AND c.relname = ANY(ARRAY[ 'practice_prescription_submission', 'practice_coaching_card', 'practice_prescription', 'practice_episode_submission', 'practice_attempt_evidence', 'competency_graph_snapshot', 'practice_curriculum_decision_event', 'practice_teacher_correction' ]) AND c.relrowsecurity; IF rls_count <> 8 THEN RAISE EXCEPTION 'expected RLS on 8 G4 relations, found %', rls_count; END IF; SELECT count(*) INTO append_guard_count FROM pg_trigger t JOIN pg_class c ON c.oid = t.tgrelid JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'app' AND c.relname = ANY(ARRAY[ 'practice_prescription_submission', 'practice_coaching_card', 'practice_prescription', 'practice_episode_submission', 'practice_attempt_evidence', 'competency_graph_snapshot', 'practice_curriculum_decision_event', 'practice_teacher_correction' ]) AND t.tgname LIKE '%append_only' AND NOT t.tgisinternal; IF append_guard_count <> 8 THEN RAISE EXCEPTION 'expected 8 append guards, found %', append_guard_count; END IF; SELECT count(*) INTO policy_count FROM pg_policies p WHERE p.schemaname = 'app' AND p.tablename = ANY(ARRAY[ 'practice_prescription_submission', 'practice_coaching_card', 'practice_prescription', 'practice_episode_submission', 'practice_attempt_evidence', 'competency_graph_snapshot', 'practice_curriculum_decision_event', 'practice_teacher_correction' ]); IF policy_count <> 16 THEN RAISE EXCEPTION 'expected 16 G4 RLS policies, found %', policy_count; END IF; END; $$; SELECT 8 AS relation_count, 8 AS rls_relation_count, 8 AS append_guard_count, 16 AS rls_policy_count, (SELECT rolbypassrls FROM pg_roles WHERE rolname = :'app_role') AS app_role_bypassrls;