release/3.20.0
CompareGitHub
Barman release notes
© Copyright EnterpriseDB UK Limited 2026 - All rights reserved.
3.20.0 (2026-08-27)
Notable changes
Barman now requires Python 3.12 or later
The minimum supported Python version has been raised to 3.12. Installations running on Python 3.8, 3.9, 3.10, or 3.11 must upgrade their Python interpreter before upgrading Barman.
References: BAR-1332.
Add support for AWS S3 SSE-C (Server-Side Encryption with Customer Keys)
Barman now supports SSE-C (Server-Side Encryption with Customer-Provided Keys) for AWS S3. The
--sse-customer-keyoption is available across all backup, restore, and WAL managementbarman-cloud-*commands. The key is supplied as afile://URI pointing to a file containing a base64-encoded 256-bit (32-byte) key (e.g.file:///etc/barman/sse-c.b64). SSE-C cannot be used together with--encryptionor--sse-kms-key-id. The equivalent server configuration parameteraws_sse_customer_keyis also supported when usingbackup_method = local-to-cloudorpostgreswith cloud destination directories.All backups and WAL files for a given server must be encrypted with the same SSE-C key. Mixing SSE-C-encrypted and unencrypted objects, or using different keys, will cause commands to fail.
References: BAR-1006.
Stop WAL receiver on inactive servers through
barman cronWhen a server is switched to
active = false, the next run ofbarman cronnow stops any backgroundreceive-walsubprocess that is still streaming for that server, and skips all other cron work. Previously inactive servers were silently filtered out at the cron level, which meant a receiver spawned while the server was active kept running indefinitely until it was stopped manually.Note however that, while the server remains inactive, the upstream Postgres server will retain WAL on its side for the still-existing slot, so on re-enabling the Barman server the next cron run will resume streaming from where the slot left off.
References: BAR-1139.
Make command handling consistent for inactive servers
Inactive servers (configured with
active = false) are Barman instances that no longer actively manage backups, but their existing catalogs remain fully accessible for inspection, verification, and maintenance.The behavior of Barman commands has been made consistent with this principle.
Now the following commands work on inactive servers: read-only commands for inspection, like check-wal-archive, list-processes and sync-info.
Also the following maintenance commands for catalog management work on inactive servers: terminate-process, keep and check-backup.
Commands that ingest new data remain rejected on inactive servers. Specifically, import-backup now cannot be used with inactive servers.
References: BAR-1343.
Add support for parallel uploads to Google Cloud Storage
Previously, backups to Google Cloud Storage required the entire tarball to be written locally before upload could begin. This was because the GCS implementation did not support multipart uploads, resulting in slower backups and higher disk space usage compared to AWS S3 and Azure Blob Storage.
Multipart upload is now supported for GCS backups. Data is now streamed in chunks and uploaded in parallel using multiple workers (specified via
-J/--jobsinbarman-cloud-backup), matching the behavior of the other cloud providers.References: BAR-972.
Performance improvements for restoring compressed backups from cloud storage
Restoring a compressed backup from cloud storage could take significantly longer than necessary, because downloading, decompressing and extracting the backup ran sequentially instead of overlapping. This has been fixed by reworking the restore pipeline so these stages now run concurrently, which is expected to noticeably improve restore performance for compressed backups.
As a result of this change, the
tarpackage is now a required dependency whenever restoring a backup stored in the cloud.References: BAR-1546.
Add parallel WAL prefetching support to
barman-wal-archiveThe
barman-wal-archivescript now supports a--paralleloption, which enables opportunistic prefetching of additional WAL files during archival. When--parallel Nis set (N > 1), up to N - 1 extra WAL files that are ready inpg_wal/archive_statusare archived concurrently in background worker processes after the primary WAL has been successfully archived. This can significantly reduce WAL archival backlog during periods of high WAL generation.Using
--parallelrequires a writable cache directory to store metadata about the WAL files being parallelized. By default, this cache directory is located at/tmp/barman-SERVER_NAME-COMPUTED_HASH, whereSERVER_NAMEis the name of the PostgreSQL server being archived, andCOMPUTED_HASHis a hash of the destination (barman host, port, and config). The cache directory can be overridden with the--prefetch-cache-diroption.References: BAR-551.
Minor changes
Script
barman-cloud-wal-restorenow exits with code 2 on network failuresbarman-cloud-wal-restorepreviously always exited with code 4 (general error) when a WAL download failed, regardless of the cause. It now exits with code 2 when the failure is caused by a loss of connectivity to the cloud provider, consistent with the behaviour ofbarman-cloud-check-wal-archive. This allows callers such as CloudNativePG to apply different retry policies for transient network errors versus permanent failures.References: BAR-1325.
Deprecate
--stopoption ofbarman receive-walThe
--stopoption ofbarman receive-walis deprecated and will be removed in a future release. Usebarman terminate-process <server> receive-walinstead.References: BAR-724.
Add check-archived-wal-range command to detect gaps in the WAL archive
A new
check-archived-wal-rangecommand has been added to Barman. It accepts a server name, abegin_wal, and anend_wal, and verifies that every WAL segment in that range is present in the archive. Missing segments are listed on exit, and the command returns a non-zero status if any are found.References: BAR-1324.
Support S3 access point ARNs, including S3 on Outposts, as cloud storage destinations
Barman's S3 cloud storage support previously required a plain bucket name in the destination URL. This prevented using S3 access points as a backup or WAL archive destination, including Amazon S3 on Outposts access points, since access point ARNs contain characters that were not handled correctly, causing the ARN to be silently truncated and the destination never reached.
Destination URLs can now specify an S3 access point ARN in place of a bucket name, using the same
s3://<access-point-arn>/<key>convention already used by the AWS CLI's own S3 commands. This applies to allbarman-cloud-*commands, as well as tobasebackups_directoryandwals_directorywhen configured with a cloud storage URL (for example withbackup_method = local-to-cloudorbackup_method = postgreswith streaming backups to the cloud).If the destination is an access point ARN that does not exist (for example due to a typo), Barman now raises a clear error explaining that access points cannot be auto-created and that the underlying bucket must already exist, instead of failing with a confusing, low-level error from the AWS SDK.
References: BAR-1561.
Store EBS snapshots locally on the Outpost for AWS Outposts-hosted instances
As part of AWS Outposts support, Barman now detects when a PostgreSQL instance targeted for a snapshot backup is running on an AWS Outpost, and creates its EBS snapshots locally on that Outpost rather than in the instance's parent AWS Region. This preserves the data residency and latency benefits of running on Outposts. No additional configuration is required.
AWS does not support locking local EBS snapshots on Outposts, so
aws_snapshot_lock_modecannot be combined with a snapshot backup of an Outposts-attached instance. Barman now raises a clear error for this combination instead of attempting an unsupported lock.References: BAR-1562.
Add keepalive support to barman-cloud-backup
barman-cloud-backupnow sends periodic heartbeat queries (SELECT 1) to the PostgreSQL server during the backup phase to prevent idle connection timeouts caused by intermediate network devices such as firewalls and load balancers. This ensures the backup session remains valid so thatpg_backup_stop()can be successfully executed after the data transfer or snapshot creation is complete.This applies to both the standard data upload path and the snapshot backup path.
The interval can be configured via the
--keepalive-intervalflag (default: 60 seconds). Setting the value to0disables the mechanism.References: BAR-1557, BAR-1571.
Add Zstd compression support for cloud backups
barman-cloud-backupnow supports Zstd compression via the--zstdoption. Zstd offers a good balance between compression ratio and speed, making it well-suited for cloud backup workloads.Zstd compression requires the optional
zstandardPython library to be installed.References: BAR-729.
Add --skip-archive-wal flag to
barman restorecommandAdded a new
--skip-archive-walCLI argument forbarman restorewhich allows users to skip the archiving of staged WAL files before initiating the restore process. By default,barman restorearchives any WAL files in the server's inco
…(truncated)