ALTER TABLE "Rule" ADD COLUMN "position" INTEGER NOT NULL DEFAULT 0; WITH ordered AS ( SELECT "id", "tenantId", ROW_NUMBER() OVER (PARTITION BY "tenantId" ORDER BY "createdAt" ASC, "id" ASC) - 1 AS pos FROM "Rule" ) UPDATE "Rule" r SET "position" = ordered.pos FROM ordered WHERE ordered.id = r.id; CREATE INDEX "Rule_tenantId_position_idx" ON "Rule"("tenantId", "position");