<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt" -->

---
title: Undo for Postgres, without losing the rest of your day
description: pgVolvra is an open-source tool that undoes a bad Postgres statement by reversing only the rows it touched, instead of restoring a whole database. It records...
canonical: https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Undo for Postgres, without losing the rest of your day | daily.dev
og:description: pgVolvra is an open-source tool that undoes a bad Postgres statement by reversing only the rows it touched, instead of restoring a whole database. It records...
og:url: https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt
og:image: https://api.daily.dev/og/posts/lwvEcahwT.png
og:image:alt: Undo for Postgres, without losing the rest of your day
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Undo for Postgres, without losing the rest of your day

**[Planet PostgreSQL](https://daily.dev/sources/planet-postgresql)** · 12 min read · 1 upvotes · 0 comments

## Summary

pgVolvra is an open-source tool that undoes a bad Postgres statement by reversing only the rows it touched, instead of restoring a whole database. It records every row change in plain SQL and PL/pgSQL, with no extension, superuser access, or filesystem access needed, so it runs on managed Postgres like Supabase, Neon, and pgEdge Starfleet. It refuses to overwrite rows changed after the mistake and has no force flag. Write throughput drops 11 to 41 percent depending on the statement, and WAL volume rises about 2.2 times. Version 1.0.0-beta2 supports Postgres 14 through 19 under the PostgreSQL License.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://postgr.es/p/9zD>

## Questions this post answers

### How can I undo a single bad UPDATE statement in Postgres without restoring the whole database?

Use pgVolvra, an open-source SQL and PL/pgSQL tool that records every row change on covered tables and can reverse just the affected rows. Enable it per table with volvra.enable, then call volvra.undo with a target table and time window and confirm => true. It checks each row before writing and refuses to overwrite rows changed afterward by other users.

_Developers tracking Postgres recovery tools like pgVolvra can follow new releases on daily.dev._

### Can I install a Postgres extension on managed services like Supabase or Neon for row-level undo?

pgVolvra needs no extension, superuser access, or filesystem access, so it installs as a single SQL file on managed Postgres. It passed a 24-check verification on Supabase and Neon free plans and on pgEdge Starfleet. Supabase requires no extra configuration since it already runs wal_level as logical; Neon requires enabling logical replication once in the console.

_Engineers evaluating managed Postgres compatibility for tools like this can keep up via daily.dev._

### How much overhead does row-level change tracking add to Postgres write performance?

Write throughput drops by 11 to 41 percent depending on the statement type, with narrow UPDATE statements being the worst case and simple INSERT the cheapest at 11 to 12 percent. Each recorded change costs roughly 300 to 400 bytes, and write-ahead log volume increases by about 2.2 times, according to pgVolvra's published benchmarks.

_Teams weighing the cost of change-tracking tools can compare benchmarks like this on daily.dev._

## Similar posts on daily.dev

- [ReviveDB: Supabase backups restore-tested against the source schema](https://daily.dev/posts/revivedb-supabase-backups-restore-tested-against-the-source-schema-yfmrgccv0) · PostgreSQL · 0 upvotes · 0 comments

---

Tags: [#postgresql](https://daily.dev/tags/postgresql)

[View this post on daily.dev](https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Undo for Postgres, without losing the rest of your day","url":"https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt"},"datePublished":"2026-10-22T21:02:56.197Z","dateModified":"2026-10-22T21:26:44.914Z","description":"pgVolvra is an open-source tool that undoes a bad Postgres statement by reversing only the rows it touched, instead of restoring a whole database. It records...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3f73bf232ead087b51ac798eaf1366ba?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3f73bf232ead087b51ac798eaf1366ba?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Planet PostgreSQL","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Planet PostgreSQL","logo":"https://media.daily.dev/image/upload/logos/placeholder.jpg","url":"https://daily.dev/sources/planet-postgresql"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"postgresql","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Planet PostgreSQL","item":"https://daily.dev/sources/planet-postgresql"},{"@type":"ListItem","position":3,"name":"Undo for Postgres, without losing the rest of your day"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/undo-for-postgres-without-losing-the-rest-of-your-day-lwvecahwt#faq","mainEntity":[{"@type":"Question","name":"How can I undo a single bad UPDATE statement in Postgres without restoring the whole database?","acceptedAnswer":{"@type":"Answer","text":"Use pgVolvra, an open-source SQL and PL/pgSQL tool that records every row change on covered tables and can reverse just the affected rows. Enable it per table with volvra.enable, then call volvra.undo with a target table and time window and confirm =\u003e true. It checks each row before writing and refuses to overwrite rows changed afterward by other users. Developers tracking Postgres recovery tools like pgVolvra can follow new releases on daily.dev."}},{"@type":"Question","name":"Can I install a Postgres extension on managed services like Supabase or Neon for row-level undo?","acceptedAnswer":{"@type":"Answer","text":"pgVolvra needs no extension, superuser access, or filesystem access, so it installs as a single SQL file on managed Postgres. It passed a 24-check verification on Supabase and Neon free plans and on pgEdge Starfleet. Supabase requires no extra configuration since it already runs wal_level as logical; Neon requires enabling logical replication once in the console. Engineers evaluating managed Postgres compatibility for tools like this can keep up via daily.dev."}},{"@type":"Question","name":"How much overhead does row-level change tracking add to Postgres write performance?","acceptedAnswer":{"@type":"Answer","text":"Write throughput drops by 11 to 41 percent depending on the statement type, with narrow UPDATE statements being the worst case and simple INSERT the cheapest at 11 to 12 percent. Each recorded change costs roughly 300 to 400 bytes, and write-ahead log volume increases by about 2.2 times, according to pgVolvra's published benchmarks. Teams weighing the cost of change-tracking tools can compare benchmarks like this on daily.dev."}}]}
```

