BEGIN; DO $$ BEGIN IF EXISTS ( SELECT 1 FROM "materials" WHERE "uploadId" IS NOT NULL AND "deletedAt" IS NULL GROUP BY "uploadId" HAVING COUNT(*) > 1 ) THEN RAISE EXCEPTION 'active materials contain duplicate uploadId values; refusing to rebuild materials_uploadId_key'; END IF; END $$; DROP INDEX IF EXISTS "materials_uploadId_key"; CREATE UNIQUE INDEX "materials_uploadId_key" ON "materials" USING btree ("uploadId") WHERE "uploadId" IS NOT NULL AND "deletedAt" IS NULL; COMMIT;