Marks
A named restore point you set before a risky change.
A Mark names a moment, like before-drop-legacy-orders, so you can rewind to exactly it: everything before is there, nothing after. Easier to find at 3 a.m. than a timestamp.
Set one before a migration, a backfill, a bulk delete, or anything an AI agent is about to run. Use the database's page, or:
rowsafe mark app before-migration-42It returns once the Mark is safely in your bucket, usually in seconds. AI agents set Marks through Guard. To use one, click Restore a copy at this Mark on the Marks page.
Names
- 1 to 63 characters: lowercase letters, digits,
-and_, starting with a letter or digit. Unique per database. - No name:
manual-<UTC time>(for examplemanual-20260924-140500). AI agents default toagent-<UTC time>. - In a project with a
.rowsafe.json, skip the database:rowsafe mark before-drop.
List them
On the Marks page, or rowsafe marks app:
NAME STATUS CREATED RESTORE FROM BACKUP LSN BY
before-migration-42 archived 2026-09-24 14:05:12 20260921-010002F 0/5A000090 key:key_... (CLI · rowsafe CLI on laptop)| Status | Meaning |
|---|---|
archived | Confirmed in your bucket. Safe to restore to. |
unconfirmed | Written, but archiving didn't confirm it within the timeout (90 seconds by default). Usable only if the archive has since moved past it. You also get an alert. |
pending | Being created. |
Restore from backup is the backup a restore to this Mark starts from. You only need it to restore by hand.
Good to know
- Cheap: on PostgreSQL, two SQL calls and one WAL segment.
- Needs an
activedatabase. - Never waits behind a running backup or Proof.
- Recorded in the audit log with who set it.
- Rowsafe sets one by itself before bringing back rows, rewinding a whole database or removing an index.
On PostgreSQL
Rowsafe calls pg_create_restore_point(name), then pg_switch_wal(), and waits until that segment is archived.