Middle+
Какво се случва с Xmin и Xmax при UPDATE?
sobes.tech AI
Отговор от AI
В PostgreSQL при изпълнение на операция UPDATE не се променя просто редът, а всъщност се създава нова версия на реда (MVCC — многоверсионен контрол на конкуренцията).
- Xmin е идентификаторът на транзакцията, която е създала (вмъкнала) текущата версия на реда.
- Xmax е идентификаторът на транзакцията, която е маркирала реда като изтрит (например при UPDATE или DELETE).
При UPDATE:
- Старият ред получава в полето Xmax идентификатора на текущата транзакция, която изпълнява UPDATE — това означава, че тази версия сега се счита за изтрита за новите транзакции.
- Създава се нова версия на реда с нов Xmin — идентификатора на текущата транзакция, и празен Xmax.
По този начин, UPDATE е по същество DELETE на старата версия + INSERT на новата версия, което осигурява изолация на транзакциите и консистентност на данните.