All rules Rule BV040
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