
На конференции PgBootcamp 2025 был доклад Евгения Воропаева "Разработка и отладка 64-битного счётчика транзакций". В докладе рассматривались проблемы, которые встретились при переносе патча, который добавляет поддержку 64-битного счетчика, с 16 на 18 версию PostgreSQL. В статье описывается история создания патча и почему он есть только в коммерческих форках.
В PostgreSQL используется 32-битные идентификаторы транзакций. У каждой версии строки в блоке таблицы есть идентификатор транзакции, которая создала эту версию. Если номер транзакции, меняющей строку, будет отстоять от номера транзакции, которая создала строку больше, чем на 2 миллиарда, то нельзя определить сравнив номера, какая из транзакций старше. Чтобы такого не произошло, в PostgreSQL есть функционал "заморозки" версий строк в блоках таблиц.