In PostgreSQL an UPDATE does not overwrite a row: it writes a new version and marks the old one as ended. Each query uses a snapshot to decide which versions it may see. The price is dead versions that VACUUM must clean up later.