Транзакции могут быть созданы явно с помощью команд BEGIN
или START TRANSACTION и завершены с помощью
COMMIT или ROLLBACK. SQL-операторы
вне явных транзакций автоматически используют
однострочные транзакции.
Каждая транзакция идентифицируется уникальным
VirtualTransactionId (также называемым
virtualXID или vxid), который
состоит из номера процесса бэкенда (или procNumber)
и последовательно назначаемого номера, локального для каждого бэкенда, известного как
localXID. Например, виртуальный идентификатор транзакции
4/12532 имеет procNumber
равный 4 и localXID
равный 12532.
Невиртуальные TransactionId (или xid),
например, 278394, назначаются последовательно
транзакциям из глобального счётчика, используемого всеми базами данных в
кластере Digital Q.DataBase. Это назначение
происходит, когда транзакция впервые записывает в базу данных. Это означает,
что xid с меньшим номером начали запись раньше, чем xid с большим номером.
Обратите внимание, что порядок, в котором транзакции выполняют первую запись в базу данных,
может отличаться от порядка, в котором транзакции начались, особенно если
транзакция началась с операторов, которые только читали данные из базы данных.
Внутренний тип идентификатора транзакции xid имеет ширину 32 бита
и заворачивается каждые
4 миллиарда транзакций. 32-битная эпоха увеличивается при каждом
завороте. Также существует 64-битный тип xid8, который
включает эту эпоху и поэтому не заворачивается в течение
срока жизни инсталляции; его можно преобразовать в xid приведением типа.
Функции в Таблица 2.6.82
возвращают значения типа xid8. Xid используются как
основа для механизма конкурентного управления версиями (MVCC) и потоковой
репликации Digital Q.DataBase.
Когда транзакция верхнего уровня с (невиртуальным) xid фиксируется,
она помечается как зафиксированная в каталоге pg_xact.
Дополнительная информация записывается в каталог
pg_commit_ts, если включён параметр track_commit_timestamp.
В дополнение к vxid и xid,
подготовленным транзакциям также назначаются глобальные идентификаторы
транзакций (GID). GID — это строковые литералы длиной до
200 байт, которые должны быть уникальными среди других текущих
подготовленных транзакций. Соответствие между GID и xid показано в pg_prepared_xacts.