mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-07 22:24:06 -05:00
improvement(queries): add workspaceId to execution logs, added missing indexes based on query insights (#2471)
* improvement(queries): added missing indexes * add workspaceId to execution logs * remove migration to prep merge * regen migration --------- Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
This commit is contained in:
26
packages/db/migrations/0127_flimsy_sister_grimm.sql
Normal file
26
packages/db/migrations/0127_flimsy_sister_grimm.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- Step 1: Add column as NULLABLE first (instant, no lock)
|
||||
ALTER TABLE "workflow_execution_logs" ADD COLUMN "workspace_id" text;--> statement-breakpoint
|
||||
|
||||
-- Step 2: Backfill workspace_id from workflow table
|
||||
UPDATE "workflow_execution_logs" wel
|
||||
SET "workspace_id" = w."workspace_id"
|
||||
FROM "workflow" w
|
||||
WHERE wel."workflow_id" = w."id"
|
||||
AND w."workspace_id" IS NOT NULL;--> statement-breakpoint
|
||||
|
||||
-- Step 3: Delete orphaned execution logs (from workflows without workspaces)
|
||||
DELETE FROM "workflow_execution_logs"
|
||||
WHERE "workspace_id" IS NULL;--> statement-breakpoint
|
||||
|
||||
-- Step 4: Add NOT NULL constraint (safe now - all remaining rows have values)
|
||||
ALTER TABLE "workflow_execution_logs" ALTER COLUMN "workspace_id" SET NOT NULL;--> statement-breakpoint
|
||||
|
||||
-- Step 5: Add foreign key constraint
|
||||
ALTER TABLE "workflow_execution_logs" ADD CONSTRAINT "workflow_execution_logs_workspace_id_workspace_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."workspace"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||||
|
||||
-- Step 6: Create indexes
|
||||
CREATE INDEX "workflow_execution_logs_workspace_started_at_idx" ON "workflow_execution_logs" USING btree ("workspace_id","started_at");--> statement-breakpoint
|
||||
CREATE INDEX "api_key_workspace_type_idx" ON "api_key" USING btree ("workspace_id","type");--> statement-breakpoint
|
||||
CREATE INDEX "api_key_user_type_idx" ON "api_key" USING btree ("user_id","type");--> statement-breakpoint
|
||||
CREATE INDEX "verification_expires_at_idx" ON "verification" USING btree ("expires_at");--> statement-breakpoint
|
||||
CREATE INDEX "workflow_blocks_type_idx" ON "workflow_blocks" USING btree ("type");
|
||||
8257
packages/db/migrations/meta/0127_snapshot.json
Normal file
8257
packages/db/migrations/meta/0127_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -883,6 +883,13 @@
|
||||
"when": 1766203036010,
|
||||
"tag": "0126_dapper_midnight",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 127,
|
||||
"version": "7",
|
||||
"when": 1766209394504,
|
||||
"tag": "0127_flimsy_sister_grimm",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -292,6 +292,9 @@ export const workflowExecutionLogs = pgTable(
|
||||
workflowId: text('workflow_id')
|
||||
.notNull()
|
||||
.references(() => workflow.id, { onDelete: 'cascade' }),
|
||||
workspaceId: text('workspace_id')
|
||||
.notNull()
|
||||
.references(() => workspace.id, { onDelete: 'cascade' }),
|
||||
executionId: text('execution_id').notNull(),
|
||||
stateSnapshotId: text('state_snapshot_id')
|
||||
.notNull()
|
||||
@@ -327,11 +330,14 @@ export const workflowExecutionLogs = pgTable(
|
||||
executionIdUnique: uniqueIndex('workflow_execution_logs_execution_id_unique').on(
|
||||
table.executionId
|
||||
),
|
||||
// Composite index for the new join-based query pattern
|
||||
workflowStartedAtIdx: index('workflow_execution_logs_workflow_started_at_idx').on(
|
||||
table.workflowId,
|
||||
table.startedAt
|
||||
),
|
||||
workspaceStartedAtIdx: index('workflow_execution_logs_workspace_started_at_idx').on(
|
||||
table.workspaceId,
|
||||
table.startedAt
|
||||
),
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user