AAttendrix Docsv1.0
Database
ReferenceImplemented

Database Triggers

Authoritative inventory of active PostgreSQL table triggers, statement coalescing, and cache synchronizations.

Database Triggers

Attendrix uses PostgreSQL triggers to maintain data denormalization, audit logs, updated timestamps, and statement-coalesced event queues.

CALENDAR PIPELINE INVARIANT
INV-GCAL-01

Calendar reconciliation triggers must fire at the SQL statement level (STATEMENT), never row-by-row. Bulk class generation or timetable imports produce a single coalesced queue job rather than thousands of individual events.

Core Statement & Row Triggers

1. Statement-Coalesced Google Calendar Trigger (classes)

  • Trigger: fn_classes_gcal_statement_coalesce
  • Table: public.classes
  • Timing / Event: AFTER INSERT OR UPDATE OR DELETE
  • Orientation: STATEMENT
  • Purpose: When an administrator inserts, modifies, or cancels classes in bulk, row-level triggers would flood gcal_sync_queue with hundreds of redundant sync events. The statement-level trigger aggregates affected batch IDs within the transaction and enqueues a single coalesced synchronization request.

2. Absence State Cache Sync (absences)

  • Trigger: trg_touch_user_on_absence
  • Table: public.absences
  • Timing / Event: AFTER INSERT OR DELETE
  • Orientation: ROW
  • Purpose: Touches users.updated_at and invalidates the cached attendance percentage in user_course_attendance_state, forcing immediate re-aggregation upon the next client query.

3. User Enrollment Cache Synchronization (user_course_enrollments)

  • Trigger: trg_sync_uce_to_jsonb
  • Table: public.user_course_enrollments
  • Timing / Event: AFTER INSERT OR UPDATE OR DELETE
  • Orientation: ROW
  • Purpose: Synchronizes the relational enrollment rows into the denormalized users.enrolled_courses JSONB column for single-read mobile profile hydration.

Active Triggers Inventory

The following 91 triggers are compiled from the live PostgreSQL database catalog:

Target TableTrigger NameTimingEventOrientationStatement / Action
absencestrg_absences_touch_userAFTERUPDATEROWEXECUTE FUNCTION touch_user_on_absence_change()
absencestrg_absences_touch_userAFTERDELETEROWEXECUTE FUNCTION touch_user_on_absence_change()
absencestrg_absences_touch_userAFTERINSERTROWEXECUTE FUNCTION touch_user_on_absence_change()
academic_calendar_eventstrg_audit_academic_calendar_eventsAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
academic_calendar_eventstrg_audit_academic_calendar_eventsAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
academic_calendar_eventstrg_audit_academic_calendar_eventsAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
academic_calendar_eventstrg_set_academic_event_formatted_dateBEFOREINSERTROWEXECUTE FUNCTION trg_auto_format_academic_event_date()
academic_calendar_eventstrg_set_academic_event_formatted_dateBEFOREUPDATEROWEXECUTE FUNCTION trg_auto_format_academic_event_date()
achievement_progresstrg_achievement_progress_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
achievement_progresstrg_audit_achievement_progressAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
achievement_progresstrg_audit_achievement_progressAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
achievement_progresstrg_audit_achievement_progressAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
achievement_templatestrg_achievement_templates_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
achievement_templatestrg_audit_achievement_templatesAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
achievement_templatestrg_audit_achievement_templatesAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
achievement_templatestrg_audit_achievement_templatesAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
amplix_ledgertrg_audit_amplix_ledgerAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
app_version_controltrg_app_version_control_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
app_version_controltrg_audit_app_version_controlAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
app_version_controltrg_audit_app_version_controlAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
app_version_controltrg_audit_app_version_controlAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
app_version_controltrg_enforce_single_current_app_versionBEFOREINSERTROWEXECUTE FUNCTION enforce_single_current_app_version()
app_version_controltrg_enforce_single_current_app_versionBEFOREUPDATEROWEXECUTE FUNCTION enforce_single_current_app_version()
batch_coursestrg_check_batch_course_id_uniqueBEFOREUPDATEROWEXECUTE FUNCTION check_batch_course_id_unique()
batch_coursestrg_check_batch_course_id_uniqueBEFOREINSERTROWEXECUTE FUNCTION check_batch_course_id_unique()
batch_coursestrg_generate_batch_course_idBEFOREUPDATEROWEXECUTE FUNCTION batch_courses_generate_course_id()
batch_coursestrg_generate_batch_course_idBEFOREINSERTROWEXECUTE FUNCTION batch_courses_generate_course_id()
batch_coursestrg_sync_batch_course_meetingsAFTERINSERTROWEXECUTE FUNCTION sync_batch_course_meetings_trigger()
batch_coursestrg_sync_batch_course_meetingsAFTERUPDATEROWEXECUTE FUNCTION sync_batch_course_meetings_trigger()
batchestrg_batches_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
bus_timingstrg_bus_timings_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
busestrg_buses_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
challenge_progresstrg_audit_challenge_progressAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
challenge_progresstrg_audit_challenge_progressAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
challenge_progresstrg_audit_challenge_progressAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
challenge_progresstrg_challenge_progress_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
challenge_progress_classestrg_audit_challenge_progress_classesAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
challenge_progress_classestrg_audit_challenge_progress_classesAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
challenge_progress_classestrg_audit_challenge_progress_classesAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
challenge_templatestrg_audit_challenge_templatesAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
challenge_templatestrg_audit_challenge_templatesAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
challenge_templatestrg_audit_challenge_templatesAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
challenge_templatestrg_challenge_templates_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
challenge_templatestrg_validate_challenge_paramsBEFOREUPDATEROWEXECUTE FUNCTION validate_challenge_params()
challenge_templatestrg_validate_challenge_paramsBEFOREINSERTROWEXECUTE FUNCTION validate_challenge_params()
class_cancellation_reportstrg_reevaluate_community_cancellationAFTERINSERTROWEXECUTE FUNCTION internal_reevaluate_community_cancellation()
class_cancellation_reportstrg_reevaluate_community_cancellationAFTERDELETEROWEXECUTE FUNCTION internal_reevaluate_community_cancellation()
classestr_classes_gcal_statement_coalesce_delAFTERDELETESTATEMENTEXECUTE FUNCTION fn_classes_gcal_statement_coalesce()
classestr_classes_gcal_statement_coalesce_insAFTERINSERTSTATEMENTEXECUTE FUNCTION fn_classes_gcal_statement_coalesce()
classestr_classes_gcal_statement_coalesce_updAFTERUPDATESTATEMENTEXECUTE FUNCTION fn_classes_gcal_statement_coalesce()
classestrg_classes_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
classestrg_generate_class_refBEFOREINSERTROWEXECUTE FUNCTION generate_class_ref()
classestrg_generate_class_refBEFOREUPDATEROWEXECUTE FUNCTION generate_class_ref()
classestrg_notify_class_eventsAFTERUPDATEROWEXECUTE FUNCTION fn_notify_class_events()
classestrg_notify_class_eventsAFTERINSERTROWEXECUTE FUNCTION fn_notify_class_events()
coursestrg_courses_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
elective_coursestrg_audit_elective_coursesAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
elective_coursestrg_audit_elective_coursesAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
elective_coursestrg_audit_elective_coursesAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
elective_coursestrg_check_elective_course_id_uniqueBEFOREINSERTROWEXECUTE FUNCTION check_elective_course_id_unique()
elective_coursestrg_check_elective_course_id_uniqueBEFOREUPDATEROWEXECUTE FUNCTION check_elective_course_id_unique()
elective_coursestrg_elective_courses_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
elective_coursestrg_generate_elective_course_idBEFOREINSERTROWEXECUTE FUNCTION generate_elective_course_id()
elective_coursestrg_generate_elective_course_idBEFOREUPDATEROWEXECUTE FUNCTION generate_elective_course_id()
elective_coursestrg_validate_elective_slotBEFOREUPDATEROWEXECUTE FUNCTION validate_elective_slot()
elective_coursestrg_validate_elective_slotBEFOREINSERTROWEXECUTE FUNCTION validate_elective_slot()
mess_menutrg_mess_menu_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
messestrg_messes_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
semesterstrg_semesters_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
slot_occurrencestrg_slot_occurrences_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
student_task_recordstrg_audit_student_task_recordsAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
student_task_recordstrg_audit_student_task_recordsAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
student_task_recordstrg_audit_student_task_recordsAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
student_task_recordstrg_student_task_records_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
taskstrg_audit_tasksAFTERDELETEROWEXECUTE FUNCTION audit_trigger()
taskstrg_audit_tasksAFTERUPDATEROWEXECUTE FUNCTION audit_trigger()
taskstrg_audit_tasksAFTERINSERTROWEXECUTE FUNCTION audit_trigger()
taskstrg_notify_task_eventsAFTERINSERTROWEXECUTE FUNCTION fn_notify_task_events()
taskstrg_notify_task_eventsAFTERDELETEROWEXECUTE FUNCTION fn_notify_task_events()
taskstrg_notify_task_eventsAFTERUPDATEROWEXECUTE FUNCTION fn_notify_task_events()
taskstrg_tasks_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
user_course_enrollmentstrg_enforce_single_offering_per_courseBEFOREUPDATEROWEXECUTE FUNCTION enforce_single_offering_per_course()
user_course_enrollmentstrg_enforce_single_offering_per_courseBEFOREINSERTROWEXECUTE FUNCTION enforce_single_offering_per_course()
user_course_enrollmentstrg_uce_sync_jsonbAFTERDELETEROWEXECUTE FUNCTION trg_sync_uce_to_jsonb_cache()
user_course_enrollmentstrg_uce_sync_jsonbAFTERUPDATEROWEXECUTE FUNCTION trg_sync_uce_to_jsonb_cache()
user_course_enrollmentstrg_uce_sync_jsonbAFTERINSERTROWEXECUTE FUNCTION trg_sync_uce_to_jsonb_cache()
user_course_enrollmentstrg_validate_uce_referential_integrityBEFOREINSERTROWEXECUTE FUNCTION validate_uce_referential_integrity()
user_course_enrollmentstrg_validate_uce_referential_integrityBEFOREUPDATEROWEXECUTE FUNCTION validate_uce_referential_integrity()
user_preferencestrg_user_preferences_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_updated_at()
userstrg_create_user_preferencesAFTERINSERTROWEXECUTE FUNCTION fn_create_user_preferences()
userstrg_users_profile_updated_atBEFOREUPDATEROWEXECUTE FUNCTION set_profile_updated_at()

Was this page helpful?

Your feedback directly guides the engineering documentation roadmap.

On this page