Идентификатор транзакции PostgreSQL
Каждая транзакция в PostgreSQL имеет свой номер (идентификатор), называемый xid, который является простым, 32–х битным счётчиком. Каждая строчка в таблице, в свою очередь, имеет, помимо прочего, два дополнительных системных поля, которые не показываются в запросах пользователей: они называются xmin и xmax. Если Вы выполните функцию txid_current() сразу же после начала транзации, то получите следующий результат:
testdb=# BEGIN;
BEGIN
testdb=# SELECT txid_current();
txid_current
--------------
100
(1 row)
В рамках Postgresql cуществует три разновидности txid:
- 0 означает недействительный (invalid) txid;
- 1 означает (самозагружаемый) bootstrap txid, который используется только при инициализации кластера баз данных;
- 2 означает застывший (frozen) txid, описание которого дано в подразделе 5.10.
txid можно сравнивать друг с другом. Например, с точки зрения txid 100 txid > 100 находятся "в будущем" и невидимы с позиции txid 100, a txid < 100 находятся "в прошлом" и txid 100 может их видеть (рис. 48).
PostgreSQL рассматривает пространство txid как круг. Предыдущие 2,1 миллиарда txid находятся "в прошлом", а следующие 2,1 миллиарда txid - "в будущем" (рис. 48 b).
Обратите внимание на то, что проблема переполнения счетчика транзакций (txid wraparound) описана в подразделе 5.10.
Примечание: BEGIN транзакции или операция SELECT не будет выделять txid.
В PostgreSQL при выполнении первой команды после выполнения команды BEGIN tixd назначается менеджером транзакций, после чего начинается транзакция.




