note
hosted, paid — --remote
timestamp without time zone
Note — this works and blocks nothing, but a performance regression is likely.
What it catches
Plain timestamp stores wall-clock digits with no zone: the moment it crosses a server, client, or DST boundary, the same value means different instants. timestamptz stores an absolute instant and costs the same 8 bytes.
Fires on
CREATE TABLE events (occurred_at timestamp);Do this instead
Use timestamptz: it stores an absolute instant (normalized to UTC) in the same 8 bytes and converts on display. Plain timestamp is only right when you truly mean zone-less wall-clock digits, like future local-time schedules.
CREATE TABLE events (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
occurred_at timestamptz NOT NULL DEFAULT now()
);Catch this before it ships
This rule runs in the hosted service on Startup and above — add --remote with a team token, or use the GitHub Action: npx bolvrk check migration.sql