Barman 3.11.0 released
22 August 2024: EnterpriseDB is proud to announce the release of Barman version 3.11.0, a Backup and Recovery Manager for PostgreSQL.
Links
Release Notes
-
Add support for Postgres 17+ incremental backups. This major feature is composed of several small changes:
-
Add
--incremental
command-line option tobarman backup
command. This is used to specify the parent backup when taking an incremental backup. The parent can be either a full backup or another incremental backup. -
Add
latest-full
shortcut backup ID. Along withlatest
, this can be used as a shortcut to select the parent backup for an incremental backup. Whilelatest
takes the latest backup independently if it is full or incremental,latest-full
takes the latest full backup. -
barman keep
command can only be applied to full backups whenbackup_method = postgres
. If a full backup has incremental backups that depend on it, all of the incrementals are also kept by Barman. -
When deleting a backup all the incremental backups depending on it, if any, are also removed.
-
Retention policies do not take incremental backups into consideration. As incremental backups cannot be recovered without having the complete chain of backups available up to the full backup, only full backups account for retention policies.
-
barman recover
needs to combine the full backup with the chain of incremental backups when recovering. The new CLI option--local-staging-path
, and the correspondinglocal_staging_path
configuration option, are used to specify the path in the Barman host where the backups will be combined when recovering an incremental backup. -
Changes to
barman show-backup
output: -
Add the “Estimated cluster size” field. It’s useful to have an estimation of the data directory size of a cluster when restoring a backup. It’s particularly useful when recovering compressed backups or incremental backups, situations where the size of the backup doesn’t reflect the size of the data directory in Postgres. In JSON format, this is stored as
cluster_size
. -
Add the “WAL summarizer” field. This field shows if
summarize_wal
was enabled in Postgres at the time the backup was taken. In JSON format, this is stored asserver_information.summarize_wal
. This field is omitted for Postgres 16 and older. -
Add “Data checksums” field. This shows if
data_checkums
was enabled in Postgres at the time the backup was taken. In JSON format, this is stored asserver_information.data_checksums
. -
Add the “Backup method” field. This shows the backup method used for this backup. In JSON format, this is stored as
base_backup_information.backup_method
. -
Rename the field “Disk Usage” as “Backup Size”. The latter provides a more comprehensive name which represents the size of the backup in the Barman host. The JSON field under
base_backup_information
was also renamed fromdisk_usage
tobackup_size
. -
Add the “WAL size” field. This shows the size of the WALs required by the backup. In JSON format, this is stored as
base_backup_information.wal_size
. -
Refactor the field “Incremental size”. It is now named “Resources saving” and it now shows an estimation of resources saved when taking incremental backups with
rsync
orpg_basebackup
. It compares the backup size with the estimated cluster size to estimate the amount of disk and network resources that were saved by taking an incremental backup. In JSON format, the field was renamed fromincremental_size
toresource_savings
underbase_backup_information
. -
Add the
system_id
field to the JSON document. This field contains the system identifier of Postgres. It was present in console format, but was missing in JSON format. -
Add fields related with Postgres incremental backups:
-
“Backup type”: indicates if the Postgres backup is full or incremental. In JSON format, this is stored as
backup_type
underbase_backup_information
. -
“Root backup”: the ID of the full backup that is the root of a chain of one or more incremental backups. In JSON format, this is stored as
catalog_information.root_backup_id
. -
“Parent backup”: the ID of the full or incremental backup from which this incremental backup was taken. In JSON format, this is stored as
catalog_information.parent_backup_id
. -
“Children Backup(s)”: the IDs of the incremental backups that were taken with this backup as the parent. In JSON format, this is stored as
catalog_information.children_backup_ids
. -
“Backup chain size”: the number of backups in the chain from this incremental backup up to the root backup. In JSON format, this is stored as
catalog_information.chain_size
. -
Changes to
barman list-backup
output: -
It now includes the backup type in the JSON output, which can be either
rsync
for backups taken with rsync,full
orincremental
for backups taken withpg_basebackup
, orsnapshot
for cloud snapshots. When printing to the console the backup type is represented by the corresponding labelsR
,F
,I
orS
. -
Remove tablespaces information from the output. That was bloating the output. Tablespaces information can still be found in the output of
barman show-backup
. -
Always set a timestamp with a time zone when configuring
recovery_target_time
throughbarman recover
. Previously, if no time zone was explicitly set through--target-time
, Barman would configurerecovery_target_time
without a time zone in Postgres. Without a time zone, Postgres would assume whatever is configured throughtimezone
GUC in Postgres. From now on Barman will issue a warning and configurerecovery_target_time
with the time zone of the Barman host if no time zone is set by the user through--target-time
option. -
When recovering a backup with the “no get wal” approach and
--target-lsn
is set, copy only the WAL files required to reach the configured target. Previously Barman would copy all the WAL files from its archive to Postgres. -
When recovering a backup with the “no get wal” approach and
--target-immediate
is set, copy only the WAL files required to reach the consistent point. Previously Barman would copy all the WAL files from its archive to Postgres. -
barman-wal-restore
now moves WALs from the spool directory topg_wal
instead of copying them. This can improve performance if the spool directory and thepg_wal
directory are in the same partition. -
barman check-backup
now shows the reason why a backup was marked asFAILED
in the output and logs. Previously for a user to know why the backup was marked asFAILED
, they would need to runbarman show-backup
command. -
Add configuration option
aws_await_snapshots_timeout
and the corresponding--aws-await-snapshots-timeout
command-line option onbarman-cloud-backup
. This specifies the timeout in seconds to wait for snapshot backups to reach the completed state. -
Add a keep-alive mechanism to rsync-based backups. Previously the Postgres session created by Barman to run
pg_backup_start()
andpg_backup_stop()
would stay idle for as long as the base backup copy would take. That could lead to a firewall or router dropping the connection because it was idle for a long time. The keep-alive mechanism sends heartbeat queries to Postgres through that connection, thus reducing the likelihood of a connection getting dropped. The interval between heartbeats can be controlled through the new configuration optionkeepalive_interval
and the corresponding CLI option--keepalive-interval
of thebarman backup
command. -
Bug fixes:
-
When recovering a backup with the “no get wal” approach and
--target-time
set, copy all WAL files. Previously Barman would attempt to “guess” the WAL files required by Postgres to reach the configured target time. However, the mechanism was not robust enough as it was based on the stats of the WAL file in the Barman host (more specifically the creation time). For example: if there were archiving or streaming lag between Postgres and Barman, that could be enough for recovery to fail because Barman would miss to copy all the required WAL files due to the weak check based on file stats. -
Pin
python-snappy
to0.6.1
when running Barman through Python 3.6 or older. Newer versions ofpython-snappy
requirecramjam
version2.7.0
or newer, and these are only available for Python 3.7 or newer. -
barman receive-wal
now exits with code1
instead of0
in the following cases: -
Being unable to run with
--reset
flag becausepg_receivewal
is running. -
Being unable to start
pg_receivewal
process because it is already running. -
Fix and improve information about Python in
barman diagnose
output: -
The command now makes sure to use the same Python interpreter under which Barman is installed when outputting the Python version through
python_ver
JSON key. Previously, if an environment had multiple Python installations and/or virtual environments, the output could eventually be misleading, as it could be fetched from a different Python interpreter. -
Added a
python_executable
key to the JSON output. That contains the path to the exact Python interpreter being used by Barman.
-
Download
Source code and wheel file can be downloaded from release 3.11.0 page.
About Barman
Barman is an open-source administration tool for backup and disaster recovery of PostgreSQL servers written in Python. It allows organizations to perform remote backups of multiple servers in business critical environments and help DBAs during the recovery phase.
Barman is maintained by EnterpriseDB and distributed under GPL v3.