-- Multi-assignee support for activities (implicit many-to-many) CREATE TABLE IF NOT EXISTS "_ActivityAssignees" ( "A" TEXT NOT NULL, "B" TEXT NOT NULL ); CREATE UNIQUE INDEX IF NOT EXISTS "_ActivityAssignees_AB_unique" ON "_ActivityAssignees"("A", "B"); CREATE INDEX IF NOT EXISTS "_ActivityAssignees_B_index" ON "_ActivityAssignees"("B"); DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = '_ActivityAssignees_A_fkey' ) THEN ALTER TABLE "_ActivityAssignees" ADD CONSTRAINT "_ActivityAssignees_A_fkey" FOREIGN KEY ("A") REFERENCES "Activity"("id") ON DELETE CASCADE ON UPDATE CASCADE; END IF; IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = '_ActivityAssignees_B_fkey' ) THEN ALTER TABLE "_ActivityAssignees" ADD CONSTRAINT "_ActivityAssignees_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; END IF; END $$; -- Backfill from legacy single assigneeId INSERT INTO "_ActivityAssignees" ("A", "B") SELECT a."id", a."assigneeId" FROM "Activity" a WHERE a."assigneeId" IS NOT NULL ON CONFLICT DO NOTHING;