From eac3815668279f991dab0ade2992c1b85325fccc Mon Sep 17 00:00:00 2001 From: Dries Augustyns Date: Fri, 5 Dec 2025 15:42:15 +0100 Subject: [PATCH] Update migration to include GIN indexes --- .../migration.sql | 12 ++++++++++++ packages/db/prisma/schema.prisma | 4 ++++ 2 files changed, 16 insertions(+) rename packages/db/prisma/migrations/{20251203202641_init => 20251205144203_init}/migration.sql (98%) diff --git a/packages/db/prisma/migrations/20251203202641_init/migration.sql b/packages/db/prisma/migrations/20251205144203_init/migration.sql similarity index 98% rename from packages/db/prisma/migrations/20251203202641_init/migration.sql rename to packages/db/prisma/migrations/20251205144203_init/migration.sql index dfdb2c5..00797a7 100644 --- a/packages/db/prisma/migrations/20251203202641_init/migration.sql +++ b/packages/db/prisma/migrations/20251205144203_init/migration.sql @@ -351,6 +351,9 @@ CREATE INDEX "contacts_projectId_idx" ON "contacts"("projectId"); -- CreateIndex CREATE INDEX "contacts_projectId_subscribed_idx" ON "contacts"("projectId", "subscribed"); +-- CreateIndex +CREATE INDEX "contacts_data_idx" ON "contacts" USING GIN ("data" jsonb_ops); + -- CreateIndex CREATE UNIQUE INDEX "contacts_projectId_email_key" ON "contacts"("projectId", "email"); @@ -363,6 +366,9 @@ CREATE INDEX "templates_projectId_type_idx" ON "templates"("projectId", "type"); -- CreateIndex CREATE INDEX "segments_projectId_idx" ON "segments"("projectId"); +-- CreateIndex +CREATE INDEX "segments_condition_idx" ON "segments" USING GIN ("condition" jsonb_ops); + -- CreateIndex CREATE INDEX "segment_memberships_segmentId_exitedAt_idx" ON "segment_memberships"("segmentId", "exitedAt"); @@ -381,6 +387,9 @@ CREATE INDEX "campaigns_scheduledFor_idx" ON "campaigns"("scheduledFor"); -- CreateIndex CREATE INDEX "campaigns_segmentId_idx" ON "campaigns"("segmentId"); +-- CreateIndex +CREATE INDEX "campaigns_audienceCondition_idx" ON "campaigns" USING GIN ("audienceCondition" jsonb_ops); + -- CreateIndex CREATE INDEX "workflows_projectId_idx" ON "workflows"("projectId"); @@ -480,6 +489,9 @@ CREATE INDEX "events_projectId_contactId_name_createdAt_idx" ON "events"("projec -- CreateIndex CREATE INDEX "events_contactId_name_createdAt_idx" ON "events"("contactId", "name", "createdAt"); +-- CreateIndex +CREATE INDEX "events_data_idx" ON "events" USING GIN ("data" jsonb_ops); + -- CreateIndex CREATE INDEX "api_requests_projectId_createdAt_idx" ON "api_requests"("projectId", "createdAt" DESC); diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 17f3653..53c95d1 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -146,6 +146,7 @@ model Contact { @@unique([projectId, email]) @@index([projectId]) @@index([projectId, subscribed]) + @@index([data(ops: JsonbOps)], type: Gin) // GIN index for fast JSON queries on Contact.data @@map("contacts") } @@ -236,6 +237,7 @@ model Segment { updatedAt DateTime @updatedAt @@index([projectId]) + @@index([condition(ops: JsonbOps)], type: Gin) // GIN index for segment condition queries @@map("segments") } @@ -313,6 +315,7 @@ model Campaign { @@index([projectId, status]) @@index([scheduledFor]) @@index([segmentId]) + @@index([audienceCondition(ops: JsonbOps)], type: Gin) // GIN index for campaign audience condition queries @@map("campaigns") } @@ -608,6 +611,7 @@ model Event { @@index([createdAt]) @@index([projectId, contactId, name, createdAt]) // For event-based segment queries (fast!) @@index([contactId, name, createdAt]) // For per-contact event lookups + @@index([data(ops: JsonbOps)], type: Gin) // GIN index for event data queries @@map("events") }