01
EterDB — Postgres 18 with an undo for one committed transaction, and an exit code for "something later read that"
EterDB (Apache 2.0, 30 stars, one fork, created July 11, nine commits, one contributor, three releases all on Thursday, Show HN by fdeth at 41 points and 19 comments) is a PostgreSQL 18 fork, a two-container stack, and a Go CLI. The premise in the README is that the existing recovery options are blunt: backups and PITR "roll back the whole database," and branches and forks "only protect you before a change ships." EterDB "reverses one transaction after it has shipped, on a live database," by recording the before and after image of every tracked row through logical decoding and applying a compensating transaction atomically, leaving concurrent unrelated writes alone. The half a backup cannot see is reads. The architecture page's example is three lines: transaction A sets max_qty to 500, transaction B reads it and inserts an order for 500, and if you undo A alone "B's order still says 500," silently wrong. Reads leave no row behind, so triggers and CDC never see one. EterDB harvests the tracking Postgres already does for SERIALIZABLE, the predicate locks behind SSI, in an "observe mode" under ordinary READ COMMITTED, with no 40001 aborts; the page says "Read overhead is a few percent." That is also why it is a fork: "One piece, read-dependency capture, has to be in the engine, and it ships as a small upstream-tracked patch."
The thread is the most hostile of the weekend and most of it is useful. NewJazz's first reply is that PITR exists; the author's answer is "PITR is not surgical." micw: "the very last thing I want is a fork that differs from the standard that everyone else is running," and he would rather it were an extension. dewey: "So instead of doing the easy thing (Giving your Claude a read-only role, having snapshots etc.) you decided to patch the database which needs to be kept in sync with every PG release and build a landing page?" ronfriedhaber points out Postgres 6.3 had built-in time travel and deprecated it for performance, and that Neon sells the same idea. One commenter's entire contribution is "Slop.", another's is "Seems like.", and a third calls the architecture page "vibeslop." What the thread does not mention and the repository does: SECURITY.md defines the failure that matters, "a correctness bug in dependency capture can mean silent data corruption (a 'false clean')," and test/ holds 32 shell scripts including false-clean.sh, three of which lint the project's own prose. The dependency graph over-approximates under memory pressure, which the docs say "costs a review rather than a missed dependency." The landing page carries nine five-star testimonials attributed to Claude Code, Codex, Cursor, Devin, Goose and four other agents under the heading "Loved by the agents that break your database." It is a joke, and it is the clearest statement on the site of who this is for.
Reach for it if you run agents with write access to a Postgres you care about and have already decided that is acceptable; it replaces the pg_dump you meant to take first, and it replaces nothing you pay for unless you want the hosted control plane, which is not in the repository. Delete the runbook step that says "restore last night's backup and replay what you can." Tradeoffs: it is a fork of the engine, so you inherit one maintainer's cadence on every Postgres point release, and the maintainer is one account with nine commits; REPLICA IDENTITY FULL on every tracked table logs the whole old row on every update, which on wide rows or large JSONB is write amplification the docs meter rather than hide; the replication slot retains WAL while the capture sidecar is down, so disk grows until it catches up; it reverses database state only and cannot unsend the email or refund the charge, though it surfaces the Stripe ids in the rows an undo touches; and "far from being production ready" is the author's phrase, not a reviewer's.