Standard System Columns¶
ERMrest defines five special system columns with reserved column names, types, and certain integrity constraints:
Name | Type | Purpose |
---|---|---|
RID | ermrest_rid | a unique not-null identifier for each row in a table |
RCT | ermrest_rct (domain over timestamptz) | not-null row creation time |
RMT | ermrest_rmt (domain over timestamptz) | not-null latest row modification time |
RCB | ermrest_rcb (domain over text) | row created by (client primary ID guid) |
RMB | ermrest_rmb (domain over text) | latest row modified by (client primary ID guid) |
Interface Guarantees¶
A client should be able to rely on the following behaviors from a compliant ERMrest catalog:
- The five columns must appear in each mutable table and must have the column types described above.
- Every row must have a unique RID value assigned at creation time and this value must not be recycled for use by another row in the same table.
- Every row must have an immutable RCT time set during row creation.
- Every tuple must have an RMT set during tuple creation. The RMT value must be equal to or greater than the RCT and every previously visible RMT for the same RID in the same table.
- The RCB and RMB values must be comparable to the client ID space exposed by webauthn as the
id
field of the object returned fromGET /authn/session
. A NULL value may be present to indicate unknown provenance, e.g. for rows manipulated by server-side logic. However, a DBA may also substitute a distinct client ID representing an administrator or robot identity in such cases. - These system-managed columns have enforced policies described below.
- The RID, RCT, and RMT are visible to all clients who can view a row
- The RCB and RMB may be hidden from some clients who can view other row content
- Clients may not supply substitute/override values for any of these columns
Column | Forced Column ACLs | Default Column ACLs |
---|---|---|
RID | {"select": ["*"], "update": [], "insert": []} |
n/a |
RCT | {"select": ["*"], "update": [], "insert": []} |
n/a |
RMT | {"select": ["*"], "update": [], "insert": []} |
n/a |
RCB | {"enumerate": ["*"], "update": [], "insert": []} |
{"select": ["*"]} |
RMB | {"enumerate": ["*"], "update": [], "insert": []} |
{"select": ["*"]} |