Guide · Doing
Find drift between environments
Read this when the same database lives in several environments and you want to know whether production still matches what staging tested. The drift board reads the snapshots that schema history already took. It doesn't connect to anything to draw a row, so it never waits on a database and never touches production.
App groups
Drift compares connections that hold the same app. Seqora groups them for you inside a
workspace: orders-local in Development, orders-staging in Staging and orders-prod in
Production share the database name orders, so they form the app orders. When the names
differ, as with orders_dev and orders, Seqora pairs them when their newest snapshots share at
least 80% of their table names.
A group holds at most one connection per environment, and a workspace with one environment has no groups. To change a group:
- Right-click the workspace in the explorer and choose
App groups…. - Rename a group, move a connection to another group, or pick
Left outto keep a connection out of every group.Automaticputs it back. - Click
Save.
Renaming a group keeps the differences you accepted under it.
Open the board
- The workspace row in the explorer shows a warning icon and the number of drift rows across its groups.
- Right-click the workspace and choose
Drift · orders, or runSchema driftfrom the command palette.
The board has one column per environment, in the order Development, Testing, Staging,
Production. Each column shows the connection, its environment, the newest migration version and
how old its snapshot is. An age over 7 days takes the warning colour. A connection Seqora has
never captured reads Never captured, with Connect beside it. The header also says how many
tables are identical everywhere, for example "26 tables identical".
Read the rows
Each row is one object that differs somewhere: customers.phone, payments_created_at_idx.
Every cell holds that environment's value, or is hatched when the object is absent there. The
cell that disagrees with the rest takes the warning colour, with the date it changed and its
source from history. Index and constraint names that differ between environments don't count as
differences.
The rows sit in three sections:
Drift: differences nothing explains. These are the ones to look at.Expected: a migration staging has run and production hasn't yet, such as0047_refunds, which the cell names, or a change only Development has that no migration made.Accepted: differences you accepted. Collapsed.
When every environment matches, the board says so: "orders matches across local, staging and prod".
Act on a row
- Select a drift row.
Compare staging → prodopens a compare between the two live connections, reading both fresh, so you get the script that makes the odd one match.- Or click
Acceptwhen the difference is on purpose. The row moves toAcceptedand stays there while every environment keeps the same value. If any of them changes, it comes back underDrift.Removeon an accepted row brings it back now.
Copy report copies the board as Markdown, for a ticket or a release note. Refresh connects
to each environment in turn and checks it, so the board shows the schema as it is now. One that
can't connect keeps its last snapshot and its age.
Caveats
- The drift board is Pro. App groups,
App groups…and the count on the workspace row are free. - The board is only as fresh as the snapshots. Use
Refresh, or open a connection, before you trust an old column. - Drift compares one engine family. A group can't mix PostgreSQL with MySQL.
- With no Production environment, the last environment in the order above is the reference.
- On MySQL and MariaDB each connection's own database is compared, whatever its name.