Know the day Postgres will stop accepting writes.

Two limits stop every write without warning: an integer ID running out, and transaction ID wraparound. Writestop projects the days left for both at your current rate, and you'll get a Slack message weeks ahead.

For backend engineers who are also the DBA: small teams on RDS, Cloud SQL, Supabase, Neon or their own Postgres, with older tables on integer keys.

Early access opens to the waitlist in signup order.

See it work Hold a founding spot

Input

2 ID columns ยท 1 database

Show the raw query output

4 rows of the Writestop query's output: 2 ID columns fed by a sequence, and transaction and multixact ID age for database shop.

Output
 kind |       name       |  type   |       sequence       |    used    |         max         | per_day  | vacuum_at |        since         
------+------------------+---------+----------------------+------------+---------------------+----------+-----------+----------------------
 id   | public.events.id | bigint  | public.events_id_seq | 8412559031 | 9223372036854775807 | 41208113 |           | 2026-10-06 04:12 UTC
 id   | public.orders.id | integer | public.orders_id_seq | 2104481029 |          2147483647 |  2312040 |           | 2026-10-06 04:12 UTC
 mxid | shop             |         |                      |    1048576 |          2144483647 |     4096 | 400000000 | 2026-10-06 04:12 UTC
 xid  | shop             |         |                      |  498213557 |          2144483647 | 14024704 | 200000000 | 2026-10-06 04:12 UTC
(4 rows)

Output

3 limits checked: 1 act now, 1 plan, 1 fine.

  1. Act now public.orders.id 18 days left

  2. Plan shop: transaction IDs 117 days left

  3. Fine public.events.id over 100 years left

What Writestop did

  • Writestop: Read every sequence and ID column's type limit and current value

    By hand: know which columns are integer and what their limits are

  • Writestop: Estimated each insert rate and projected the day each limit is reached

    By hand: a query shows today's number, not the day you run out

  • Writestop: Checked transaction ID age against the wraparound limit

    By hand: remember to run the check every week

See the full sample

Hold a founding spot

The first 100 on the waitlist get $9/database/mo, locked for as long as you stay subscribed. Then it's $19.

We store your email, a source tag, your consent and the signup time in Cloudflare D1, to email you about Writestop. Privacy

BVL privacy policy

Why not a query or a monitoring stack?

A query you or an AI assistant write
Shows today's number, not the day you run out, and someone has to keep running it.
Prometheus and postgres_exporter
Free, if you run Prometheus and write and maintain the alert rules yourself.
A full Postgres monitoring platform
Covers this and much more, priced for teams that want all of it.
Writestop
Just these limits, days left at your real rate, in Slack, with nothing to run.

How it works

  1. Create a role that reads the Postgres catalog and your sequences, never table rows:
    SQL
    CREATE ROLE writestop LOGIN;
    GRANT SELECT ON ALL SEQUENCES IN SCHEMA public
      TO writestop;
    -- As your tables' owner, to cover new sequences:
    ALTER DEFAULT PRIVILEGES IN SCHEMA public
      GRANT SELECT ON SEQUENCES TO writestop;
    Repeat the GRANT and ALTER DEFAULT PRIVILEGES lines for each schema. Checked on PostgreSQL 16.2: with only these grants the role runs the demo query, and it cannot read table rows or advance a sequence.
  2. Writestop will check every hour and project the days left for each integer sequence and ID column, and for each database's transaction ID age.
  3. Weeks before a limit, you'll get a Slack message with the fix: for an ID, the bigint migration (Migration Guard shows its lock risk); for wraparound, what is holding vacuum back.

Price

$9/database/mo for the first 100 on the waitlist, then $19. Nothing is charged when you join.