A stable snapshot can still violate a predicate invariant
PostgreSQL Repeatable Read gives each transaction a stable snapshot, but concurrent transactions can still form a serialization anomaly. If two doctors both observe two people on call and each updates only their own row, both disjoint writes can commit while the cross-row invariant becomes false. Locking only the row each transaction writes does not coordinate the predicate they both read.