Check-ins Data Model
This document provides complete documentation of the Planning Center Check-ins data model in Parable, including all tables, fields, and relationships.Overview
The Check-ins module contains 26 tables supporting attendance tracking, child safety, volunteer management, and event organization.Query Requirements
Schema Prefix
IMPORTANT: All tables in the Planning Center Check-ins module are in theplanning_center
schema. You MUST prefix all table names with planning_center.
in your queries.
✅ CORRECT: SELECT * FROM planning_center.checkins_checkins
❌ INCORRECT: SELECT * FROM checkins_checkins
Row Level Security (RLS)
This database uses Row Level Security (RLS) to automatically filter data based on:- tenant_organization_id: You only see data for your current organization
- system_status: You only see ‘active’ records by default
- ❌
WHERE tenant_organization_id = 1
(unnecessary) - ❌
WHERE system_status = 'active'
(unnecessary)
Core Tables Overview
Primary Entity Tables
checkins_checkins
- Individual check-in recordscheckins_people
- People who check incheckins_events
- Event definitions (Sunday Service, Youth Group, etc.)checkins_event_times
- Specific instances of eventscheckins_event_periods
- Active check-in sessionscheckins_locations
- Physical and logical locationscheckins_stations
- Check-in kiosk stationscheckins_labels
- Print labels for check-inscheckins_headcounts
- Manual attendance countscheckins_check_in_times
- Specific check-in time records
Supporting Entity Tables
checkins_attendance_types
- Types of attendance trackingcheckins_checkin_groups
- Groups of check-ins processed togethercheckins_event_labels
- Labels associated with eventscheckins_location_event_periods
- Location-specific period countscheckins_location_event_times
- Location-specific time countscheckins_location_labels
- Labels for locationscheckins_options
- Label printing optionscheckins_passes
- Pass codes for check-inscheckins_person_events
- Person-event connectionscheckins_themes
- Visual themes for stationscheckins_organizations
- Organization settingscheckins_integration_links
- External system integrations
Relationship Tables
checkins_checkin_relationships
- Links check-ins to other entitiescheckins_event_relationships
- Links events to related entitiescheckins_eventtime_relationships
- Links event times to events and locationscheckins_location_relationships
- Links locations to parents and events
Table Definitions
checkins_checkins
The main check-in record table that tracks individual check-ins.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
check_in_id | VARCHAR(64) | Planning Center check-in ID |
first_name | VARCHAR(64) | First name of person checking in |
last_name | VARCHAR(64) | Last name of person checking in |
kind | VARCHAR(64) | Type: ‘Regular’, ‘Guest’, ‘Volunteer’ |
one_time_guest | BOOLEAN | True if first-time guest |
security_code | VARCHAR(64) | Security code for child pickup |
number | INTEGER | Check-in number |
medical_notes | TEXT | Medical information or allergies |
emergency_contact_name | VARCHAR(64) | Emergency contact name |
emergency_contact_phone_number | VARCHAR(64) | Emergency contact phone |
created_at | TIMESTAMP | When check-in was created |
updated_at | TIMESTAMP | Last update time |
confirmed_at | TIMESTAMP | When check-in was confirmed |
checked_out_at | TIMESTAMP | When person checked out |
event_period_id | VARCHAR(64) | Associated event period |
person_id | VARCHAR(64) | Associated person ID |
event_id | VARCHAR(64) | Associated event ID |
checked_in_at_id | VARCHAR(64) | Station where checked in |
checked_in_by_id | VARCHAR(64) | Person who checked them in |
checked_out_by_id | VARCHAR(64) | Person who checked them out |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status: ‘active’, ‘transferring’, ‘stale’ |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_people
People who have checked in to events.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
person_id | VARCHAR(64) | Planning Center person ID |
avatar_url | VARCHAR(2048) | Avatar image URL |
birthdate | DATE | Date of birth |
check_in_count | INTEGER | Total check-ins |
child | BOOLEAN | True if child |
created_at | TIMESTAMP | When person was created |
demographic_avatar_url | VARCHAR(2048) | Demographic profile image URL |
first_name | VARCHAR(64) | First name |
gender | VARCHAR(64) | Gender |
grade | INTEGER | School grade level |
headcounter | BOOLEAN | Can perform headcounts |
ignore_filters | BOOLEAN | Ignores event filters |
last_checked_in_at | TIMESTAMP | Last check-in time |
last_name | VARCHAR(64) | Last name |
medical_notes | TEXT | Medical information |
middle_name | VARCHAR(64) | Middle name |
name | VARCHAR(64) | Full name |
name_prefix | VARCHAR(64) | Name prefix (Mr., Mrs., etc.) |
name_suffix | VARCHAR(64) | Name suffix (Jr., Sr., etc.) |
passed_background_check | BOOLEAN | Background check status |
permission | VARCHAR(50) | Permission level |
top_permission | VARCHAR(50) | Highest permission level |
updated_at | TIMESTAMP | Last update time |
organization_id | VARCHAR(64) | Organization ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_events
Recurring event definitions (e.g., “Sunday Service”, “Youth Group”).Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
event_id | VARCHAR(64) | Planning Center event ID |
name | VARCHAR(255) | Event name |
frequency | VARCHAR(64) | How often event occurs |
enable_services_integration | BOOLEAN | Links to Services module |
location_times_enabled | BOOLEAN | Uses location-specific times |
pre_select_enabled | BOOLEAN | Pre-selection allowed |
integration_key | VARCHAR(64) | Integration identifier |
archived_at | TIMESTAMP | When event was archived |
created_at | TIMESTAMP | When event was created |
updated_at | TIMESTAMP | Last update time |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_times
Specific instances of events with start and end times.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
event_time_id | VARCHAR(64) | Planning Center event time ID |
created_at | TIMESTAMP | When created |
day_of_week | INTEGER | Day of week (0-6) |
guest_count | INTEGER | Number of guests |
hides_at | TIMESTAMP | When event time is hidden |
hour | INTEGER | Hour of day (0-23) |
minute | INTEGER | Minute of the hour |
name | TEXT | Event time name |
regular_count | INTEGER | Number of regular attendees |
shows_at | TIMESTAMP | When event time is shown |
starts_at | TIMESTAMP | Event start time |
total_count | INTEGER | Total attendance count |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Number of volunteers |
event_id | VARCHAR(64) | Parent event ID |
event_period_id | VARCHAR(64) | Associated event period ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_periods
Active check-in sessions for events.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
event_period_id | VARCHAR(64) | Planning Center event period ID |
created_at | TIMESTAMP | When created |
ends_at | TIMESTAMP | Period end time |
guest_count | INTEGER | Guest count |
note | TEXT | Period notes |
regular_count | INTEGER | Regular attendee count |
starts_at | TIMESTAMP | Period start time |
volunteer_count | INTEGER | Volunteer count |
quantity | INTEGER | Total quantity |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_locations
Physical locations (rooms) and logical groupings.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
location_id | VARCHAR(64) | Planning Center location ID |
name | VARCHAR(255) | Location name |
kind | VARCHAR(255) | Type: ‘Folder’, ‘Location’, etc. |
opened | BOOLEAN | Currently open for check-ins |
child_or_adult | VARCHAR(50) | ‘child’ or ‘adult’ |
gender | VARCHAR(50) | Gender restriction if any |
age_min_in_months | INTEGER | Minimum age in months |
age_max_in_months | INTEGER | Maximum age in months |
age_on | DATE | Date for age calculation |
age_range_by | VARCHAR(255) | How age range is determined |
grade_min | INTEGER | Minimum grade level |
grade_max | INTEGER | Maximum grade level |
max_occupancy | INTEGER | Room capacity |
min_volunteers | INTEGER | Minimum volunteers required |
attendees_per_volunteer | INTEGER | Required ratio |
milestone | VARCHAR(255) | Associated milestone |
position | INTEGER | Sort order |
effective_date | DATE | When settings take effect |
created_at | TIMESTAMP | When created |
updated_at | TIMESTAMP | Last update |
parent_id | VARCHAR(64) | Parent location ID |
event_id | VARCHAR(64) | Associated event |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_stations
Check-in kiosk stations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
station_id | VARCHAR(64) | Planning Center station ID |
created_at | TIMESTAMP | When created |
input_type | TEXT | Input method |
input_type_options | TEXT | Input configuration |
mode | INTEGER | Station mode |
name | TEXT | Station name |
timeout_seconds | INTEGER | Session timeout in seconds |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_labels
Print labels for check-ins.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
label_id | VARCHAR(64) | Planning Center label ID |
created_at | TIMESTAMP | When created |
name | VARCHAR(255) | Label name |
prints_for | VARCHAR(255) | Who gets this label |
roll | VARCHAR(255) | Label roll type |
updated_at | TIMESTAMP | Last update |
xml | TEXT | Label XML definition |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_headcounts
Manual attendance counts.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
headcount_id | VARCHAR(64) | Planning Center headcount ID |
total | INTEGER | Total count |
updated_at | TIMESTAMP | When count was updated |
created_at | TIMESTAMP | When count was created |
attendance_type_id | VARCHAR(64) | Type of attendance |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_checkin_times
Specific times when people checked into locations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
check_in_time_id | VARCHAR(64) | Planning Center check-in time ID |
kind | VARCHAR(64) | Type of check-in time |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
check_in_id | VARCHAR(64) | Parent check-in ID |
pre_check_id | VARCHAR(64) | Pre-check identifier |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_attendance_types
Types of attendance tracking for events.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
attendance_type_id | VARCHAR(64) | Planning Center attendance type ID |
color | VARCHAR(255) | Display color |
created_at | TIMESTAMP | When created |
attendance_limit | INTEGER | Maximum attendance |
name | VARCHAR(64) | Attendance type name |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_checkin_groups
Groups of check-ins processed together for printing labels.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
check_in_group_id | VARCHAR(64) | Planning Center check-in group ID |
check_ins_count | INTEGER | Number of check-ins in group |
created_at | TIMESTAMP | When group was created |
name_labels_count | INTEGER | Number of name labels |
print_status | VARCHAR(64) | Printing status |
security_labels_count | INTEGER | Number of security labels |
updated_at | TIMESTAMP | Last update |
event_period_id | VARCHAR(64) | Associated event period |
print_station_id | VARCHAR(64) | Print station ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_labels
Labels associated with specific events.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
event_label_id | VARCHAR(64) | Planning Center event label ID |
created_at | TIMESTAMP | When created |
for_guest | BOOLEAN | Print for guests |
for_regular | BOOLEAN | Print for regular attendees |
for_volunteer | BOOLEAN | Print for volunteers |
quantity | INTEGER | Number of labels to print |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
label_id | VARCHAR(64) | Associated label ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_event_periods
Location-specific attendance counts for event periods.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
location_event_period_id | VARCHAR(64) | Planning Center location event period ID |
created_at | TIMESTAMP | When created |
guest_count | INTEGER | Guest count for this location |
regular_count | INTEGER | Regular attendee count for this location |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Volunteer count for this location |
event_period_id | VARCHAR(64) | Associated event period |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_event_times
Location-specific attendance counts for event times.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
location_event_time_id | VARCHAR(64) | Planning Center location event time ID |
created_at | TIMESTAMP | When created |
guest_count | INTEGER | Guest count for this location |
regular_count | INTEGER | Regular attendee count for this location |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Volunteer count for this location |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_labels
Labels associated with specific locations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
location_label_id | VARCHAR(64) | Planning Center location label ID |
created_at | TIMESTAMP | When created |
for_guest | BOOLEAN | Print for guests |
for_regular | BOOLEAN | Print for regular attendees |
for_volunteer | BOOLEAN | Print for volunteers |
quantity | INTEGER | Number of labels to print |
updated_at | TIMESTAMP | Last update |
label_id | VARCHAR(64) | Associated label ID |
location_id | VARCHAR(64) | Associated location ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_options
Label printing options and configurations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
option_id | VARCHAR(64) | Planning Center option ID |
body | TEXT | Option configuration body |
created_at | TIMESTAMP | When created |
quantity | INTEGER | Quantity setting |
updated_at | TIMESTAMP | Last update |
label_id | VARCHAR(64) | Associated label ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_passes
Pass codes for secure check-ins.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
pass_id | VARCHAR(64) | Planning Center pass ID |
code | VARCHAR(255) | Pass code |
created_at | TIMESTAMP | When created |
kind | VARCHAR(255) | Type of pass |
updated_at | TIMESTAMP | Last update |
person_id | VARCHAR(64) | Associated person ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_person_events
Connections between people and events they’ve attended.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
person_event_id | VARCHAR(64) | Planning Center person event ID |
check_in_count | INTEGER | Number of check-ins for this event |
created_at | TIMESTAMP | When created |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
first_check_in_id | VARCHAR(64) | First check-in ID |
last_check_in_id | VARCHAR(64) | Most recent check-in ID |
person_id | VARCHAR(64) | Associated person ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_themes
Visual themes for check-in stations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
theme_id | VARCHAR(64) | Planning Center theme ID |
background_color | TEXT | Background color |
color | TEXT | Primary color |
created_at | TIMESTAMP | When created |
image_thumbnail | TEXT | Thumbnail image URL |
mode | TEXT | Theme mode |
name | TEXT | Theme name |
text_color | TEXT | Text color |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_organizations
Organization settings and configuration.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
organization_id | VARCHAR(64) | Planning Center organization ID |
avatar_url | VARCHAR(2048) | Organization avatar URL |
created_at | TIMESTAMP | When created |
daily_check_ins | INTEGER | Daily check-in count |
date_format_pattern | VARCHAR(64) | Date format pattern |
name | VARCHAR(255) | Organization name |
time_zone | VARCHAR(64) | Organization time zone |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_integration_links
Links to external systems and integrations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
integration_link_id | VARCHAR(64) | Planning Center integration link ID |
remote_app | TEXT | Remote application name |
remote_gid | TEXT | Remote global ID |
remote_id | TEXT | Remote ID |
remote_type | TEXT | Remote type |
sync_future_assignment_types | BOOLEAN | Sync future assignments |
local | VARCHAR(64) | Local identifier |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
Relationship Tables
checkins_checkin_relationships
Links check-ins to people, events, locations, and other entities.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
checkin_id | VARCHAR(64) | Check-in ID |
relationship_type | VARCHAR(50) | Type: ‘Person’, ‘Event’, ‘Location’, etc. |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
Person
- Links to checkins_peopleEvent
- Links to checkins_eventsEventTime
- Links to checkins_event_timesEventPeriod
- Links to checkins_event_periodsLocation
- Links to checkins_locations
checkins_event_relationships
Links events to other entities.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
event_id | VARCHAR(64) | Event ID |
relationship_type | VARCHAR(50) | Type of relationship |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
checkins_location_relationships
Links locations to parent locations and events.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
location_id | VARCHAR(64) | Location ID |
relationship_type | VARCHAR(50) | Type: ‘Parent’, ‘Event’, etc. |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
checkins_eventtime_relationships
Links event times to events and locations.Column | Type | Description |
---|---|---|
id | UUID | Internal unique identifier |
eventtime_id | VARCHAR(64) | Event time ID |
relationship_type | VARCHAR(50) | Type of relationship |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
System Fields
All tables include these system fields for data management:tenant_organization_id
- Multi-tenant organization identifiersystem_status
- Data lifecycle status:transferring
- Being imported from Planning Centeractive
- Current active datastale
- Marked for removal
system_created_at
- When record was created in Parablesystem_updated_at
- When record was last updated in Parable
Common Query Patterns
Joining Check-ins to People
Joining Check-ins to Locations
Finding Location Hierarchy
Data Integrity Rules
- Schema Qualification: Always use
planning_center.
prefix for all table references - Row Level Security: RLS automatically handles multi-tenancy and status filtering - do not add manual filters
- Monetary Values: Any fee or purchase columns are stored in cents - divide by 100.0 for display
- Check-in Status Flags: Use fields like
confirmed_at
,checked_out_at
, andheadcount_type
instead of relying onsystem_status
- Direct ID Columns: Core tables such as
checkins_checkins
andcheckins_event_times
expose direct IDs for performance-sensitive joins
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM checkins_checkins
- ✅
FROM planning_center.checkins_checkins
- ❌
-
Adding Redundant RLS Filters
- ❌
WHERE tenant_organization_id = 1 AND system_status = 'active'
- ✅ Trust RLS to handle this automatically
- ❌
-
Joining Without Schema
- ❌
JOIN checkins_locations l ON ...
- ✅
JOIN planning_center.checkins_locations l ON ...
- ❌
-
Skipping Currency Conversion
- ❌
SELECT fee_cents as fee
- ✅
SELECT fee_cents / 100.0 as fee
- ❌
Performance Considerations
-
Indexes: All tables have optimized indexes on:
- Primary keys and entity IDs
- Join columns and foreign keys
- Date columns for time-based queries
-
Query Optimization:
- Always use the
planning_center.
schema prefix - RLS handles tenant and status filtering automatically
- Filter by event period or location status when relevant
- Consider using CTEs for complex hierarchical queries
- Use direct ID columns when available instead of relationship tables
- Always use the
Next Steps
- Return to Basic Queries for simple examples
- Review Advanced Queries for complex analysis
- Check Reporting Examples for production-ready reports