행을 덮어쓰기보다 새 버전을 만든다
PostgreSQL은 UPDATE 때 기존 행을 즉시 지우지 않고 새 버전을 만들어. 각 트랜잭션의 스냅샷은 자신에게 보이는 버전을 골라 읽어. 읽기는 쓰기를 막지 않고 쓰기는 읽기를 막지 않지만, 두 트랜잭션이 같은 행을 갱신하면 한쪽이 다른 쪽을 기다려.
보이지 않는 옛 버전은 나중에 정리해
아직 오래된 스냅샷이 필요할 수 있으므로 이전 행 버전을 바로 버릴 수 없어. 어느 트랜잭션도 필요로 하지 않게 되면 VACUUM이 공간을 다시 쓸 수 있게 표시해. 긴 트랜잭션은 이 정리를 늦춰 부풀림을 만들 수 있어.