Sobes.tech
Middle+

Какво се случва с Xmin и Xmax при UPDATE?

sobes.tech AI

Отговор от AI

В PostgreSQL при изпълнение на операция UPDATE не се променя просто редът, а всъщност се създава нова версия на реда (MVCC — многоверсионен контрол на конкуренцията).

  • Xmin е идентификаторът на транзакцията, която е създала (вмъкнала) текущата версия на реда.
  • Xmax е идентификаторът на транзакцията, която е маркирала реда като изтрит (например при UPDATE или DELETE).

При UPDATE:

  1. Старият ред получава в полето Xmax идентификатора на текущата транзакция, която изпълнява UPDATE — това означава, че тази версия сега се счита за изтрита за новите транзакции.
  2. Създава се нова версия на реда с нов Xmin — идентификатора на текущата транзакция, и празен Xmax.

По този начин, UPDATE е по същество DELETE на старата версия + INSERT на новата версия, което осигурява изолация на транзакциите и консистентност на данните.