diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index c1bbf3c7d4..4bc845e57c 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -233,6 +233,13 @@ my %pgdump_runs = ( '--exclude-database', '*dump_test*', '--no-sync', ], }, + no_toast_compression => { + dump_cmd => [ + 'pg_dump', '--no-sync', + "--file=$tempdir/no_toast_compression.sql", + '--no-toast-compression', 'postgres', + ], + }, no_blobs => { dump_cmd => [ 'pg_dump', '--no-sync', @@ -377,6 +384,10 @@ my %pgdump_runs = ( # of the pg_dump runs happening. This is what "seeds" the # system with objects to be dumped out. # +# There can be a flag called 'lz4', which can be set if the test +# case depends on LZ4. Tests marked with this flag are skipped if +# the build used does not support LZ4. +# # Building of this hash takes a bit of time as all of the regexps # included in it are compiled. This greatly improves performance # as the regexps are used for each run the test applies to. @@ -397,6 +408,7 @@ my %full_runs = ( exclude_dump_test_schema => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_owner => 1, no_privs => 1, @@ -2071,6 +2083,28 @@ my %tests = ( unlike => { exclude_dump_test_schema => 1, }, }, + 'CREATE MATERIALIZED VIEW matview_compression' => { + create_order => 20, + create_sql => 'CREATE MATERIALIZED VIEW + dump_test.matview_compression (col2) AS + SELECT col2 FROM dump_test.test_table; + ALTER MATERIALIZED VIEW dump_test.matview_compression + ALTER COLUMN col2 SET COMPRESSION lz4;', + regexp => qr/^ + \QCREATE MATERIALIZED VIEW dump_test.matview_compression AS\E + \n\s+\QSELECT test_table.col2\E + \n\s+\QFROM dump_test.test_table\E + \n\s+\QWITH NO DATA;\E + .* + \QALTER TABLE ONLY dump_test.matview_compression ALTER COLUMN col2 SET COMPRESSION lz4;\E\n + /xms, + lz4 => 1, + like => + { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, + unlike => + { exclude_dump_test_schema => 1, no_toast_compression => 1, }, + }, + 'CREATE POLICY p1 ON test_table' => { create_order => 22, create_sql => 'CREATE POLICY p1 ON dump_test.test_table @@ -2279,7 +2313,7 @@ my %tests = ( create_order => 3, create_sql => 'CREATE TABLE dump_test.test_table ( col1 serial primary key, - col2 text, + col2 text COMPRESSION pglz, col3 text, col4 text, CHECK (col1 <= 1000) @@ -2337,6 +2371,27 @@ my %tests = ( unlike => { exclude_dump_test_schema => 1, }, }, + 'CREATE TABLE test_compression' => { + create_order => 3, + create_sql => 'CREATE TABLE dump_test.test_compression ( + col1 int, + col2 text COMPRESSION lz4 + );', + regexp => qr/^ + \QCREATE TABLE dump_test.test_compression (\E\n + \s+\Qcol1 integer,\E\n + \s+\Qcol2 text\E\n + \);\n + .* + \QALTER TABLE ONLY dump_test.test_compression ALTER COLUMN col2 SET COMPRESSION lz4;\E\n + /xms, + lz4 => 1, + like => + { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, + unlike => + { exclude_dump_test_schema => 1, no_toast_compression => 1, }, + }, + 'CREATE TABLE measurement PARTITIONED BY' => { create_order => 90, create_sql => 'CREATE TABLE dump_test.measurement ( @@ -2686,6 +2741,7 @@ my %tests = ( defaults => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_privs => 1, no_owner => 1, @@ -2758,6 +2814,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, exclude_test_table_data => 1, + no_toast_compression => 1, no_blobs => 1, no_privs => 1, no_owner => 1, @@ -3391,6 +3448,9 @@ if ($collation_check_stderr !~ /ERROR: /) $collation_support = 1; } +# Determine whether build supports LZ4. +my $supports_lz4 = check_pg_config("#define HAVE_LIBLZ4 1"); + # Create a second database for certain tests to work against $node->psql('postgres', 'create database regress_pg_dump_test;'); @@ -3448,6 +3508,13 @@ foreach my $run (sort keys %pgdump_runs) next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + # If there is a like entry, but no unlike entry, then we will test the like case if ($tests{$test}->{like}->{$test_key} && !defined($tests{$test}->{unlike}->{$test_key})) @@ -3505,6 +3572,13 @@ foreach my $test ( next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + # Add terminating semicolon $create_sql{$test_db} .= $tests{$test}->{create_sql} . ";"; } @@ -3603,6 +3677,13 @@ foreach my $run (sort keys %pgdump_runs) next; } + # Skip tests specific to LZ4 if this build does not support + # this option. + if (!$supports_lz4 && defined($tests{$test}->{lz4})) + { + next; + } + if ($run_db ne $test_db) { next;