# 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: 1. The five columns *must* appear in each mutable table and *must* have the column types described above. 2. 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. 3. Every row *must* have an immutable RCT time set during row creation. 4. 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. 5. The RCB and RMB values *must* be comparable to the client ID space exposed by webauthn as the `id` field of the object returned from `GET /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. 6. 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": ["*"]}` |