v3-0001-Extend-compression-coverage-for-pg_dump-pg_restor.patch
text/x-patch
Filename: v3-0001-Extend-compression-coverage-for-pg_dump-pg_restor.patch
Type: text/x-patch
Part: 2
Message:
Re: Add LZ4 compression in pg_dump
Patch
Format: format-patch
Series: patch v3-0001
Subject: Extend compression coverage for pg_dump, pg_restore
| File | + | − |
|---|---|---|
| src/bin/pg_dump/Makefile | 2 | 0 |
| src/bin/pg_dump/t/001_basic.pl | 15 | 0 |
| src/bin/pg_dump/t/002_pg_dump.pl | 92 | 0 |
From 65232a1ed8fdfb57775bef856a907965dfcda14d Mon Sep 17 00:00:00 2001
From: Georgios Kokolatos <gkokolatos@pm.me>
Date: Tue, 29 Mar 2022 08:29:15 +0000
Subject: [PATCH v3 1/4] Extend compression coverage for pg_dump, pg_restore
---
src/bin/pg_dump/Makefile | 2 +
src/bin/pg_dump/t/001_basic.pl | 15 ++++++
src/bin/pg_dump/t/002_pg_dump.pl | 92 ++++++++++++++++++++++++++++++++
3 files changed, 109 insertions(+)
diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile
index 302f7e02d6..2f524b09bf 100644
--- a/src/bin/pg_dump/Makefile
+++ b/src/bin/pg_dump/Makefile
@@ -16,6 +16,8 @@ subdir = src/bin/pg_dump
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
+export GZIP_PROGRAM=$(GZIP)
+
override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport)
diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl
index e0bf3eb032..9c1238181a 100644
--- a/src/bin/pg_dump/t/001_basic.pl
+++ b/src/bin/pg_dump/t/001_basic.pl
@@ -125,6 +125,21 @@ command_fails_like(
qr/\Qpg_dump: error: -Z\/--compress must be in range 0..9\E/,
'pg_dump: -Z/--compress must be in range');
+if (check_pg_config("#define HAVE_LIBZ 1"))
+{
+ command_fails_like(
+ [ 'pg_dump', '--compress', '1', '--format', 'tar' ],
+ qr/\Qpg_dump: error: compression is not supported by tar archive format\E/,
+ 'pg_dump: compression is not supported by tar archive format');
+}
+else
+{
+ command_fails_like(
+ [ 'pg_dump', '--compress', '1', '--format', 'tar' ],
+ qr/\Qpg_dump: warning: requested compression not available in this installation -- archive will be uncompressed\E/,
+ 'pg_dump: warning: requested compression not available in this installation -- archive will be uncompressed');
+}
+
command_fails_like(
[ 'pg_dump', '--extra-float-digits', '-16' ],
qr/\Qpg_dump: error: --extra-float-digits must be in range\E/,
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index af5d6fa5a3..b9f6dccec4 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -54,6 +54,81 @@ my %pgdump_runs = (
"$tempdir/binary_upgrade.dump",
],
},
+
+ # Do not use --no-sync to give test coverage for data sync.
+ compression_gzip_custom_format => {
+ test_key => 'compression',
+ dump_cmd => [
+ 'pg_dump',
+ '--format=custom', '--compress=1',
+ "--file=$tempdir/compression_gzip_custom_format.dump",
+ 'postgres',
+ ],
+ restore_cmd => [
+ 'pg_restore',
+ "--file=$tempdir/compression_gzip_custom_format.sql",
+ "$tempdir/compression_gzip_custom_format.dump",
+ ],
+ },
+
+ # Do not use --no-sync to give test coverage for data sync.
+ compression_gzip_directory_format => {
+ test_key => 'compression',
+ dump_cmd => [
+ 'pg_dump',
+ '--format=directory', '--compress=1',
+ "--file=$tempdir/compression_gzip_directory_format",
+ 'postgres',
+ ],
+ # Give coverage for manually compressed blob.toc files during restore.
+ compress_cmd => [
+ $ENV{'GZIP_PROGRAM'},
+ '-f',
+ "$tempdir/compression_gzip_directory_format/blobs.toc",
+ ],
+ restore_cmd => [
+ 'pg_restore',
+ "--file=$tempdir/compression_gzip_directory_format.sql",
+ "$tempdir/compression_gzip_directory_format",
+ ],
+ },
+
+ compression_gzip_directory_format_parallel => {
+ test_key => 'compression',
+ dump_cmd => [
+ 'pg_dump', '--jobs=2',
+ '--format=directory', '--compress=6',
+ "--file=$tempdir/compression_gzip_directory_format_parallel",
+ 'postgres',
+ ],
+ # Give coverage for manually compressed blob.toc files during restore.
+ compress_cmd => [
+ $ENV{'GZIP_PROGRAM'},
+ '-f',
+ "$tempdir/compression_gzip_directory_format_parallel/blobs.toc",
+ ],
+ restore_cmd => [
+ 'pg_restore',
+ '--jobs=3',
+ "--file=$tempdir/compression_gzip_directory_format_parallel.sql",
+ "$tempdir/compression_gzip_directory_format_parallel",
+ ],
+ },
+
+ # Check that the output is valid gzip
+ compression_gzip_plain_format => {
+ test_key => 'compression',
+ dump_cmd => [
+ 'pg_dump', '--format=plain', '-Z1',
+ "--file=$tempdir/compression_gzip_plain_format.sql.gz",
+ 'postgres',
+ ],
+ compress_cmd => [
+ $ENV{'GZIP_PROGRAM'},
+ '-d',
+ "$tempdir/compression_gzip_plain_format.sql.gz",
+ ],
+ },
clean => {
dump_cmd => [
'pg_dump',
@@ -424,6 +499,7 @@ my %full_runs = (
binary_upgrade => 1,
clean => 1,
clean_if_exists => 1,
+ compression => 1,
createdb => 1,
defaults => 1,
exclude_dump_test_schema => 1,
@@ -3098,6 +3174,7 @@ my %tests = (
binary_upgrade => 1,
clean => 1,
clean_if_exists => 1,
+ compression => 1,
createdb => 1,
defaults => 1,
exclude_test_table => 1,
@@ -3171,6 +3248,7 @@ my %tests = (
binary_upgrade => 1,
clean => 1,
clean_if_exists => 1,
+ compression => 1,
createdb => 1,
defaults => 1,
exclude_dump_test_schema => 1,
@@ -3947,9 +4025,23 @@ foreach my $run (sort keys %pgdump_runs)
my $test_key = $run;
my $run_db = 'postgres';
+ my $supports_compression = check_pg_config("#define HAVE_LIBZ 1");
+ my $compress_program = $ENV{GZIP_PROGRAM};
+
$node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} },
"$run: pg_dump runs");
+ if (defined($pgdump_runs{$run}->{compress_cmd}))
+ {
+ # Skip compression_cmd tests when compression is not supported,
+ # as the result is uncompressed or the utility program does not
+ # exist
+ next if !$supports_compression || !defined($compress_program)
+ || $compress_program eq '';
+ command_ok( \@{ $pgdump_runs{$run}->{compress_cmd} },
+ "$run: compression commands");
+ }
+
if ($pgdump_runs{$run}->{restore_cmd})
{
$node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} },
--
2.32.0