All Resources
R-74
Technology
Tessera DB Tutorial: Set Up Incremental Sync with a Cursor Column
Stop re-ingesting your whole source on every poll. A cursor column tracks where the last sync left off and pulls only newer rows.
PAR2 Labs
August 29, 2026
3 min

Without a cursor, every polling sync re-fetches the entire source. That's fine for a ten-row demo and painful for a large table. Incremental sync is the difference.
01
Before you start
Tier
01
Incremental sync is part of the Enterprise connector suite.
02
Step 1: Pick a cursor column
The cursor must only ever move forward as rows arrive. Good choices:
id — for append-only tables.
updated_at — for tables where rows are mutated in place, as long as the application bumps the timestamp on every update.
created_at — for true event streams.
Bad cursor choices
01
Anything that can move backwards — manually-set timestamps, soft-delete flags, status columns — will silently skip rows when a value lower than the cursor arrives.
When nothing new has arrived, the sync returns quickly with zero rows imported.
03
Step 2: Enable it in the wizard
In the source's sync settings, turn on incremental sync and provide the cursor field — the column name for a database source, or the field name in the response for a REST source. For REST sources you also tell the connector which query parameter the API expects for "give me records after this value."
04
Step 3: Watch the cursor advance
Each successful sync records the new high-water cursor value with the source. Open the history panel and you'll see each attempt's timestamp, rows imported, and the cursor it advanced to. When nothing new has arrived, the sync returns quickly with zero rows imported.
05
Step 4: Handle late-arriving data
If your source delivers rows with backdated cursor values — a handheld scanner uploading yesterday's events today — a strict cursor will skip them. Two options:
Use a column recorded by the source database (when the row landed) rather than an event-time column (when the event happened).
Pull with a small overlap window so each sync re-checks a recent slice and catches stragglers. The trade-off is a little duplicate work — and because every fact is content-addressed, re-seen rows are de-duplicated on insert.
Key Takeaways
01
Chosen a cursor column that only ever moves forward, such as id, updated_at or created_at.
02
Turned on incremental sync with the cursor field, plus the query parameter a REST API expects.
03
Watched each sync record its new high-water cursor value in the history panel.
04
Handled late-arriving rows with a source-recorded column or a small overlap window.
PAR2 Labs · Technology
Work With Us