11-- Step 1: Add column as NULLABLE first (instant, no lock)
2- ALTER TABLE " workflow_execution_logs" ADD COLUMN " workspace_id" text ;-- > statement-breakpoint
2+ ALTER TABLE " workflow_execution_logs" ADD COLUMN IF NOT EXISTS " workspace_id" text ;-- > statement-breakpoint
33
44-- Step 2: Backfill workspace_id from workflow table
55UPDATE " workflow_execution_logs" wel
66SET " workspace_id" = w." workspace_id"
77FROM " workflow" w
88WHERE wel." workflow_id" = w." id"
9- AND w." workspace_id" IS NOT NULL ;-- > statement-breakpoint
9+ AND w." workspace_id" IS NOT NULL
10+ AND wel." workspace_id" IS NULL ;-- > statement-breakpoint
1011
1112-- Step 3: Delete orphaned execution logs (from workflows without workspaces)
1213DELETE FROM " workflow_execution_logs"
@@ -16,11 +17,15 @@ WHERE "workspace_id" IS NULL;--> statement-breakpoint
1617ALTER TABLE " workflow_execution_logs" ALTER COLUMN " workspace_id" SET NOT NULL ;-- > statement-breakpoint
1718
1819-- Step 5: Add foreign key constraint
19- 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
20+ DO $$
21+ BEGIN
22+ IF NOT EXISTS (
23+ SELECT 1 FROM pg_constraint WHERE conname = ' workflow_execution_logs_workspace_id_workspace_id_fk'
24+ ) THEN
25+ ALTER TABLE " workflow_execution_logs" ADD CONSTRAINT " workflow_execution_logs_workspace_id_workspace_id_fk"
26+ FOREIGN KEY (" workspace_id" ) REFERENCES " public" ." workspace" (" id" ) ON DELETE cascade ON UPDATE no action;
27+ END IF;
28+ END $$;-- > statement-breakpoint
2029
2130-- Step 6: Create indexes
22- CREATE INDEX "workflow_execution_logs_workspace_started_at_idx " ON " workflow_execution_logs" USING btree (" workspace_id" ," started_at" );-- > statement-breakpoint
23- CREATE INDEX "api_key_workspace_type_idx " ON " api_key" USING btree (" workspace_id" ," type" );-- > statement-breakpoint
24- CREATE INDEX "api_key_user_type_idx " ON " api_key" USING btree (" user_id" ," type" );-- > statement-breakpoint
25- CREATE INDEX "verification_expires_at_idx " ON " verification" USING btree (" expires_at" );-- > statement-breakpoint
26- CREATE INDEX "workflow_blocks_type_idx " ON " workflow_blocks" USING btree (" type" );
31+ CREATE INDEX IF NOT EXISTS " workflow_execution_logs_workspace_started_at_idx" ON " workflow_execution_logs" USING btree (" workspace_id" ," started_at" );
0 commit comments