I agree that this is a limitation, but since we don't have transactions, we can't really do it this way. We'd have already committed a bunch of stuff before we get to a failure and we have no way of undoing it.

We could do something down the road where we make available the PKs of the rows that failed. Right now we return the number of rows that were modified. Or maybe we could have a "strict mode" in which we fail the upsert when we see this exception.  Not sure - can you file an enhancement request for this so we don't lose track of it?