Почему значения xmin и xmax совпадают в PostgreSQL? - PullRequest
0 голосов
/ 21 февраля 2019

Я изучаю MVCC в PostgreSQL.Как я понял, при обновлении строки будет добавлена ​​новая строка, а значение xmax в старой строке будет иметь значение xmin новой добавленной строки.Когда я проверил это в таблице в моей базе данных Postgres, значения xmin и xmax совпадают.Что это значит?

   xmin   |   xmax   |    id    |     serial     | paid 
----------+----------+----------+----------------+------
 54569114 | 54569114 | 11099324 | 76605297311437 | t
 54569111 | 54569111 | 11099323 | 38131108141783 | t
 54569101 | 54569101 | 11099322 | 49399633274146 | t
 54569092 |        0 | 11099321 | 44672543705101 | f
 54569090 | 54569090 | 11099320 | 21324499293647 | t
 54569083 |        0 | 11099319 | 82878160317074 | f
 54569079 | 54569079 | 11099318 | 31091666079121 | t

1 Ответ

0 голосов
/ 21 февраля 2019

xmax выполняет двойную функцию: используется для обозначения видимости (вместе с xmin, но также используется для удержания блокировок строк .

Для устранения неоднозначности между этими двумяиспользует статус транзакции и используются дополнительные «невидимые» флаги в кортеже.

Таким образом, если вы видите строку, в которой два значения идентичны, транзакция, которая создала строку, также заблокировала строку.обычно это признак того, что кортеж был создан с INSERT ... ON CONFLICT.

См. этот ответ и в моем блоге для получения дополнительной информации.

...