Skip to content

Glossary

Transaction time

Transaction time is the period during which a statement was present in a system's recorded history.

Time and versioning

Transaction time tracks when a database recorded an assertion as present, and when a later operation superseded that recorded state. It is tied to the system's history, not to the period when the assertion applied in the world. A document can describe an event from January while first entering the record in April. That entry cannot honestly become part of the system's January knowledge state merely because its subject matter is old.

Reliable use requires preserving previous states and assigning timestamps according to a defined clock and commit boundary. Import time, ingestion time, and review time may all differ; the chosen transaction timestamp should have a documented meaning. Corrections normally create a new recorded state rather than rewriting the old one. Replication and backfills need special treatment because the time a source was originally created is not the time a receiving system recorded it.

Transaction time supports an answer to what a decision maker could have found in the record at a specified point. It is particularly useful in audits following late evidence or a disputed correction. It does not show when a proposition was true in the outside world, nor whether a decision maker actually saw it. Those questions require valid time, access evidence, and the underlying sources alongside the recorded history.

Example

Halden Therapeutics AG (fictional) receives a January notice on 4 April and records it on 5 April. Its transaction history begins on 5 April, even if the notice concerns January.

Transaction time as the system's memory

Transaction time records when the system held a statement as part of its recorded history. It is assigned by the system, not by the user, and in a well-designed store it only moves forward: rows are not edited in place, and a change appears as a new row with a later transaction time. This property is what lets the system say what it knew on any past date. Martin Fowler calls the corresponding view the record history in Bitemporal History, and the Wikipedia article on temporal databases describes the vocabulary.

Database products implement transaction time as system versioning. Microsoft's documentation of temporal tables describes a table that keeps a history of changes and supports queries against past states, and the lakehouse formats Delta Lake and Apache Iceberg expose earlier snapshots of a table by version or timestamp. All of them rest on the same principle: the history is written by the system and cannot be edited by ordinary users.

Pitfalls with transaction time

Clock reliability matters. If transaction time comes from a server clock, clock skew between servers can place two writes in the wrong order; designs that need strict ordering use a single sequencer or logical clocks. Batch loads need care: a nightly load that stamps every row with the load time hides the order in which the underlying changes happened. Late-arriving data should keep its arrival time as transaction time and carry its real time as valid time, so that the delay is visible.

Deletion and privacy complicate the picture. Retaining all history conflicts with obligations to erase personal data; a design must decide which history is kept, for how long, under the retention schedule, and how erasure is performed without breaking the integrity of the rest of the log. Such decisions should be taken in advance and recorded, and not discovered during a request. The article on valid time versus transaction time discusses these clocks together with observation and publication time.

A worked example

A data team publishes a quarterly figure for the number of active studies of Halden Therapeutics AG (fictional). The figure is 41 when first published on 5 April. On 20 April, a late registry update raises it to 44 for the same quarter. A system with transaction time stores both: the value 41 recorded 5 April to 20 April, and 44 recorded from 20 April. A regulator asks why the April board pack said 41. The team queries the store as of 10 April and returns 41, with the registry state at that date, and shows the later revision as a separate transaction. Without transaction time, the board pack could only be said to differ from the current data, with no way to show that it was right on the information then available.

Checks a reviewer can run

Ask whether a change to a stored value creates a new version or edits in place. Ask whether ordinary users can alter history. Ask how late-arriving data are stamped. Ask how erasure requests are reconciled with history. Reproduce a figure from an earlier report by querying as of the report date, and compare it to what was published.

Related terms and boundaries

Transaction time pairs with valid time to form bitemporal data. It underlies as-of queries, is typically produced by an append-only log or by event sourcing, and gives an audit trail its time dimension.

Common misreadings

  • Backdating a recorded fact to its source's effective date.
  • Assuming transaction time proves a person read the record.
  • Confusing a source's publication timestamp with a system commit.

Related terms

Appears in

Found an error on this page? See corrections for what counts as one, how to report it and the dated log.

Enquiry

Where does "Transaction time" bear on a decision of yours?

This entry sits under time and versioning. If a decision in your organization turns on it, send the entity concerned, the sources you fuse to describe it and who may read which of them. We reply with what a first record would cover.

Or write to [email protected] in your own words.