Concepts
E-Maj is built on three core concepts.
Tables Group
A table group represents a set of application tables that share the same lifecycle. This means their content can be restored as a whole if needed. Typically, a table group includes all tables in a database that are updated by one or more sets of programs.
Each table group is identified by a unique name within its database.
Additionally, a table group can also include partitions of partitioned tables and sequences.
Tables (including partitions) and sequences in a table group can belong to different schemas within the database.
At any given time, a table group is in one of two states:
LOGGING: Updates applied to the tables in the group are recorded.
IDLE: Updates are NOT recorded.
A table group can be either:
ROLLBACKABLE (default): Allows reverting recorded changes.
AUDIT_ONLY: Reverting recorded changes is NOT possible. This type is useful for tables without an explicitly created PRIMARY KEY or for UNLOGGED tables.
Mark
A mark is a stable reference point in the lifecycle of a table group. It captures the state of all tables and sequences in the group at a specific moment. A mark is explicitly created by a user action
The mark is identified by a unique name within its table group.
Rollback
An E-Maj rollback operation resets all tables and sequences in a group to the state they had when a mark was set.
There are two types of rollback:
Unlogged rollback: Changes canceled by the rollback are permanently discarded, with no trace kept in the log tables.
Logged rollback: Changes canceled by the rollback are recorded in the log tables, allowing the rollback itself to be reversed later. In other words, a logged rollback can be rolled back.
Note that the E-Maj rollback concept is distinct from PostgreSQL’s transaction rollback mechanism.