Open-source PostgreSQL backup tools compared, 2026
Eight self-hosted tools that put PostgreSQL backups somewhere other than the database server, compared on what matters after the first week: whether anything checks the file is usable, where it can go, what deletes old copies, and who tells you when it stops.
Everything below comes from each project's own README or documentation and from the GitHub and Docker Hub APIs, all read on 2026-10-19; the sources are under each tool. "Not documented" means the project's documentation does not say, not that the feature is missing. We make Dumpling and dumpling-backup, which is in the list; it is marked, and it is the newest and least used tool here.
Which one fits
- You want a dashboard and real restore tests: Databasus. It is the one backup tool here that restores into a throwaway database and reports row counts.
- You back up many kinds of database on several machines: Portabase, for one dashboard with agents next to each database, or db-backup if a configuration file suits you better than a UI.
- You only need rotating dumps on one host: postgres-backup-local, with something else copying the volume off the machine. A backup on the same disk as the database is not off-site.
- You want dumps in your own bucket from a stateless container, cron job or CI: dumpling-backup (ours). It checks every archive as it streams, deletes only files it wrote, and needs no disk. It is new; weigh that.
- You already have backups and need evidence they restore: Restoredrill, described below, alongside whatever makes the backups.
- You run one of the postgres-backup-s3 images: Plan a move. The eeshugerman repository is archived with no PostgreSQL 17 or 18 image, and the schickling image on Docker Hub has not been rebuilt since 2022.
What "verified" means, three levels
- Checksum. Proves the file was not changed after it was written. A dump that was truncated before the checksum was taken passes.
- Archive check. The restore tool must accept the file:
pg_restore --listparses a PostgreSQL archive and lists what is in it, and a MySQL dump must end with its completion line. Cheap enough to run on every backup. Does not prove the data loads into a server with your extensions and roles. - Test restore. The file is restored into a throwaway database and checked. The strongest evidence, at the cost of a database's worth of disk and time per check.
Whichever a tool does, a restore drill by a person, a few times a year, is what proves the whole procedure works.
At a glance
| Tool | Backup check | Storage | Popularity |
|---|---|---|---|
| Databasus | Restores into a throwaway database container and reports the restored size and per-table row counts; per database, after each backup or on a schedule | Local, S3-compatible incl. R2, Google Drive, Dropbox, SFTP, NAS, rclone | 9,141 stars · 2.2M Docker Hub pulls (formerly Postgresus) |
| Portabase | Not documented | Local, S3-compatible, Google Drive, Azure Blob, GCS, SFTP, rclone | 1,848 stars · 303k Docker Hub pulls |
| PG Back Web | Not documented (its health checks cover databases and destinations, not dumps) | Local, any number of S3 buckets | 2,645 stars · 498k Docker Hub pulls |
| postgres-backup-local | Not documented | Local filesystem only, one that supports hard links | 1,208 stars · 29.7M Docker Hub pulls |
| db-backup (nfrastack, formerly tiredofit) | Checksums (md5, sha1) with a metadata file per backup; no restore test documented | Filesystem, S3-compatible, WebDAV; Azure Blob and GCS in the paid edition | 1,550 stars · 25.4M pulls under tiredofit/db-backup, 78k under nfrastack/db-backup |
| postgres-backup-s3 (schickling) | Not documented | S3 and S3-compatible endpoints | 1.8M Docker Hub pulls (its 876 stars are for a repository of many images) |
| postgres-backup-s3 (eeshugerman) | Not documented | S3 and S3-compatible endpoints | 666 stars · 1.2M Docker Hub pulls |
| dumpling-backupours | pg_restore --list parses every archive as it streams (the mysqldump trailer for MySQL); an unreadable archive fails the run. Not a restore into a database | S3-compatible: S3, R2, B2, Wasabi, Spaces, Hetzner, MinIO | New: released 2026-10-18, images on GHCR |
Databasus
Teams that want a dashboard, several engines, roles and real restore tests, and will run a web app with its own storage for it.
- Form
- Self-hosted web app (Docker, Helm)
- Databases
- PostgreSQL (logical and physical), MySQL, MariaDB, MongoDB
- Storage
- Local, S3-compatible incl. R2, Google Drive, Dropbox, SFTP, NAS, rclone
- Backup check
- Restores into a throwaway database container and reports the restored size and per-table row counts; per database, after each backup or on a schedule
- Retention
- By age, by count, grandfather-father-son, size caps
- Encryption
- AES-256-GCM
- Alerts
- Email, Telegram, Slack, Discord, Teams, Mattermost, webhooks
- Licence
- Apache-2.0
- Latest release
- v3.61.0, 2026-10-10
- Popularity
- 9,141 stars · 2.2M Docker Hub pulls (formerly Postgresus)
Sources: github.com/databasus/databasus · databasus.com/restore-verification
Portabase
Self-hosters with many kinds of database across several machines who want one dashboard for all of them.
- Form
- Self-hosted web dashboard plus agents that run next to the databases
- Databases
- PostgreSQL, MySQL, MariaDB, MongoDB, SQLite, Redis, Valkey, Firebird, SQL Server, Docker volumes
- Storage
- Local, S3-compatible, Google Drive, Azure Blob, GCS, SFTP, rclone
- Backup check
- Not documented
- Retention
- Listed as built in; mechanism not documented
- Encryption
- AES-GCM
- Alerts
- Email, Slack, Discord, Telegram, ntfy, Gotify, webhooks
- Licence
- Apache-2.0
- Latest release
- 1.33.2, 2026-10-18
- Popularity
- 1,848 stars · 303k Docker Hub pulls
Sources: github.com/Portabase/portabase · portabase.io/docs · portabase.io/docs/comparisons/overview
PG Back Web
PostgreSQL-only users who want a small web UI over scheduled dumps.
- Form
- Self-hosted web app; needs its own PostgreSQL for app data
- Databases
- PostgreSQL 13 to 18
- Storage
- Local, any number of S3 buckets
- Backup check
- Not documented (its health checks cover databases and destinations, not dumps)
- Retention
- Not documented
- Encryption
- Documented for stored credentials; backup files not documented
- Alerts
- Webhooks on success, failure and failed health checks
- Licence
- AGPL-3.0
- Latest release
- v0.5.2, 2026-08-28; last commit 2026-09-02; README announces a rename to UFO Backup
- Popularity
- 2,645 stars · 498k Docker Hub pulls
Sources: github.com/eduardolat/pgbackweb
postgres-backup-local
One host with a volume to rotate dumps on, where something else copies the volume off the machine.
- Form
- Container, no UI
- Databases
- PostgreSQL (single databases or the whole cluster)
- Storage
- Local filesystem only, one that supports hard links
- Backup check
- Not documented
- Retention
- Daily, weekly, monthly tiers by age; old files removed only after a successful backup
- Encryption
- Not documented
- Alerts
- Webhooks on success and error, hook scripts, healthcheck port
- Licence
- MIT
- Latest release
- No releases; image last pushed 2025-09-26 (PostgreSQL 18 tag)
- Popularity
- 1,208 stars · 29.7M Docker Hub pulls
Sources: github.com/prodrigestivill/docker-postgres-backup-local · hub.docker.com/r/prodrigestivill/postgres-backup-local
db-backup (nfrastack, formerly tiredofit)
Operators backing up many engine types from one configuration who are fine with some features being paid.
- Form
- Binary, container image, NixOS module
- Databases
- PostgreSQL, MySQL, MariaDB, MongoDB, SQL Server, Redis, SQLite, InfluxDB, CouchDB
- Storage
- Filesystem, S3-compatible, WebDAV; Azure Blob and GCS in the paid edition
- Backup check
- Checksums (md5, sha1) with a metadata file per backup; no restore test documented
- Retention
- Keep last N or by age; per-period tiers in the paid edition
- Encryption
- age in the free edition; GPG and OpenSSL in the paid edition
- Alerts
- None in v5 (removed, per its upgrade guide); pre and post hooks remain
- Licence
- AGPL-3.0 community edition plus a proprietary supporter edition
- Latest release
- 5.0.5, 2026-10-07
- Popularity
- 1,550 stars · 25.4M pulls under tiredofit/db-backup, 78k under nfrastack/db-backup
Sources: github.com/nfrastack/db-backup · nfrastack.com/db-backup/editions · nfrastack.com/db-backup/upgrade
postgres-backup-s3 (schickling)
Existing setups. The image on Docker Hub predates the source's PostgreSQL 17 update, so build it yourself or move on.
- Form
- Container, no UI
- Databases
- PostgreSQL
- Storage
- S3 and S3-compatible endpoints
- Backup check
- Not documented
- Retention
- Not documented
- Encryption
- Optional password, OpenSSL AES-256-CBC
- Alerts
- Not documented
- Licence
- MIT
- Latest release
- Source updated 2025-07-31; the published image was last pushed 2022-10-20
- Popularity
- 1.8M Docker Hub pulls (its 876 stars are for a repository of many images)
Sources: github.com/schickling/dockerfiles/tree/master/postgres-backup-s3 · hub.docker.com/r/schickling/postgres-backup-s3
postgres-backup-s3 (eeshugerman)
Nobody new: the repository is archived and has no PostgreSQL 17 or 18 image.
- Form
- Container, no UI (backup and restore)
- Databases
- PostgreSQL 12 to 16
- Storage
- S3 and S3-compatible endpoints
- Backup check
- Not documented
- Retention
- By age (deletes backups older than N days)
- Encryption
- Optional GPG passphrase
- Alerts
- Not documented
- Licence
- MIT
- Latest release
- Archived on GitHub; last commit and image 2024-01-27
- Popularity
- 666 stars · 1.2M Docker Hub pulls
Sources: github.com/eeshugerman/postgres-backup-s3 · hub.docker.com/r/eeshugerman/postgres-backup-s3
dumpling-backupours
Anyone who wants verified dumps streamed to their own bucket from a stateless container, with nothing on local disk.
- Form
- Container, no UI; also runs once under cron, Railway or a GitHub Action
- Databases
- PostgreSQL (image per client major, 16 to 18), MySQL, MariaDB
- Storage
- S3-compatible: S3, R2, B2, Wasabi, Spaces, Hetzner, MinIO
- Backup check
- pg_restore --list parses every archive as it streams (the mysqldump trailer for MySQL); an unreadable archive fails the run. Not a restore into a database
- Retention
- Keep last N and/or by age; deletes only files it wrote, and skips retention after a failed check
- Encryption
- Optional passphrase, OpenSSL AES-256-CBC compatible
- Alerts
- Slack, Discord, any webhook; healthchecks.io-style ping
- Licence
- MIT
- Latest release
- v0.1.0, 2026-10-18
- Popularity
- New: released 2026-10-18, images on GHCR
Sources: github.com/siddhujz/dumpling-backup
Not a backup tool, but worth knowing: Restoredrill
Restoredrill: A Go CLI and GitHub Action (MIT, v0.4.0 of 2026-09-03, 113 stars) that takes an existing PostgreSQL or MySQL 8 dump, restores it into a throwaway container, runs checks you define (row counts, SQL assertions, how old the newest data is) and writes a JSON evidence report. It makes no backups itself. Pair it with any of the tools above if an auditor wants proof of restores.
How this list was made
The tools are the self-hosted PostgreSQL backup projects with the most stars or Docker pulls that we found, plus our own. Managed services (SimpleBackups, SnapShooter and others) and physical-backup tools for running your own server (pgBackRest, Barman, WAL-G) are left out: they answer different questions. Star and pull counts are a snapshot; pulls include automated redeploys and say little about how many people use a tool. If something here is wrong or out of date, write to support@getdumpling.dev and it will be corrected with the date.
Dumpling is the hosted version of dumpling-backup: the same archive check on every run, into your own bucket, with a run history, missed-run alerts and nothing to deploy. One database with daily backups is free, no card.