由 John Doe 六月 25, 2025
你想在进行基础备份的时候,同时进行打包和压缩吗?
特性提交日志
扩展 pg_basebackup 的压缩控制选项。
--compress
选项现支持接收压缩方法及可选压缩级别,语法格式为METHOD[:LEVEL]
。当前客户端压缩支持的方法包括 “none” 和 “gzip”。这些方法仅使用整数值表示压缩级别,但未来实现的其他方法可根据需要使用更具体的关键字。
本次提交保持逻辑向后兼容,新的--compress
选项格式遵循以下兼容规则:
-z/--gzip
等同于--compress=gzip
。--compress=NUM
含义如下: 若NUM = 0
,则等效于--compress=none
。 若NUM > 0
,则等效于--compress=gzip:NUM
。
此外,后续还计划扩展此语法以支持服务端压缩。
讨论:https://postgr.es/m/Yb3GEgWwcu4wZDuA@paquier.xyz
示例
PostgreSQL 的最新版本已经为 pg_basebackup 提供了 gzip 压缩。下面,让我们来进行一次简单的演示。
为了能备份一些数据,我们将使用 pgbench 创建一个小型数据库:
$ psql -c "create database redrock"
$ pgbench -i -s 100 redrock
dropping old tables...
creating tables...
generating data (client-side)...
10000000 of 10000000 tuples (100%) done (elapsed 28.91 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 36.32 s (drop tables 0.00 s, create tables 0.02 s, client-side generate 29.17 s, vacuum 0.57 s, primary keys 6.56 s).
让我们使用传统方式,使用 gzip 最高压缩级别来转储它。我们先看看有哪些压缩选项:
$ pg_basebackup --help | grep -A 1 LEVEL
-Z, --compress={gzip,none}[:LEVEL] or [LEVEL]
compress tar output with given compression method or level
目前只有 “none” 和 “gzip”:
$ mkdir /var/tmp/backup
$ pg_basebackup -D /var/tmp/backup/ -Z none
$ ls /var/tmp/backup/
backup_label base global pg_dynshmem pg_ident.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf
backup_manifest current_logfiles pg_commit_ts pg_hba.conf pg_log pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf
$ rm -rf /var/tmp/backup/*
$ pg_basebackup -D /var/tmp/backup/ -F t -Z gzip:4
$ ls -l /var/tmp/backup/
total 3316
-rw------- 1 postgres postgres 138314 Jan 21 08:39 backup_manifest
-rw------- 1 postgres postgres 82357329 Jan 21 08:39 base.tar.gz
-rw------- 1 postgres postgres 17075 Jan 21 08:39 pg_wal.tar.gz
既然已经提供了压缩控制的选项,期待社区后续还会支持其他的压缩方式。
非常不错的特性。感谢社区的所有相关人员。
参考
提交日志:https://git.postgresql.org/pg/commitdiff/5c649fe153367cdab278738ee4aebbfd158e0546