Greenplum does not update the records, it marks the delete flag.
Each record contains two slots, xmin and xmax.
Updating a row is treated as a delete and an insert, so the XID (transaction ID) is saved to the xmax of the current row and the xmin of the newly inserted row.
Now let us see how update works with help of an example;
[R1][T1] —————-> First time record is inserted, R1
Updating same records after sometime
[R1][T1][T22] ————-> Record R1 is updated; T22 is the new row transaction id
[R22][T22] ————-> New updated record R33; Note 0 in xmax indicates new record.
If the record is deleted simply xmax will have the XID.