Contents
Temporal Features
ProvSQL provides support for temporal databases – databases where data validity is associated with time intervals DBLP:conf/pw/WidiaatmajaDDS25. This feature is implemented on top of the data-modification tracking infrastructure.
Note
Temporal features require PostgreSQL ≥ 14.
Overview
Temporal provenance allows you to track when each fact was valid, represent intervals of validity, and query the database "as of" a given point in time. The implementation uses the PostgreSQL tstzmultirange type to represent validity periods.
Temporal Tables
A temporal table is a provenance-enabled table augmented with a validity interval column. Helper functions are provided to create and manage such tables.
Valid-Time Queries
get_valid_time returns the validity interval of a fact as a tstzmultirange, computed from the provenance circuit and the modification history:
SELECT *, get_valid_time(provsql, 'mytable') AS valid_time FROM mytable;
You can filter to only currently-valid facts:
SELECT * FROM mytable WHERE get_valid_time(provsql, 'mytable') @> CURRENT_TIMESTAMP;
Union of Validity Intervals
union_tstzintervals computes the union of validity intervals associated with a query result via its provenance:
SELECT entity_id,
union_tstzintervals(provenance(), 'interval_mapping')
FROM temporal_table;
Temporal Query Functions
ProvSQL provides additional functions for time-travel queries:
timetravel returns all versions of a table that were valid at a given point in time:
SELECT * FROM timetravel('mytable', CURRENT_TIMESTAMP)
AS t(id int, value int, valid_time tstzmultirange, provsql uuid);
timeslice returns all versions valid during a given interval:
SELECT * FROM timeslice('mytable',
CURRENT_TIMESTAMP - INTERVAL '1 day',
CURRENT_TIMESTAMP)
AS t(id int, value int, valid_time tstzmultirange, provsql uuid);
history returns the full modification history for a specific entity, identified by key column values:
SELECT * FROM history('mytable', ARRAY['id'], ARRAY['42'])
AS t(id int, value int, valid_time tstzmultirange, provsql uuid);
Relationship to Data Modification Tracking
Temporal support is built on top of data modification tracking (see data-modification). The provenance circuit records the full history of insertions and deletions, which is then interpreted temporally by the interval-aware evaluation functions.