summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_upgrade/TESTING15
-rw-r--r--src/bin/pg_upgrade/t/002_pg_upgrade.pl25
2 files changed, 40 insertions, 0 deletions
diff --git a/src/bin/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
index 127dc30bbb3..98286231d77 100644
--- a/src/bin/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -17,6 +17,21 @@ the creation of the dump):
export olddump=...somewhere/dump.sql (old version's dump)
export oldinstall=...otherversion/ (old version's install base path)
+"filter_rules" is a variable that can be used to specify a file with custom
+filtering rules applied before comparing the dumps of the PostgreSQL
+instances near the end of the tests, in the shape of regular expressions
+valid for perl. This is useful to enforce certain validation cases where
+pg_dump could create inconsistent outputs across major versions.
+For example:
+
+ # Remove all CREATE POLICY statements
+ s/^CREATE\sPOLICY.*//mgx
+ # Replace REFRESH with DROP for materialized views
+ s/^REFRESH\s(MATERIALIZED\sVIEW)/DROP $1/mgx
+
+Lines beginning with '#' and empty lines are ignored. One rule can be
+defined per line.
+
Finally, the tests can be done by running
make check
diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
index 4cc14693060..c066fd7d938 100644
--- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl
+++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
@@ -45,6 +45,31 @@ sub filter_dump
# Remove empty lines.
$dump_contents =~ s/^\n//mgx;
+ # Apply custom filtering rules, if any.
+ if (defined($ENV{filter_rules}))
+ {
+ my $filter_file = $ENV{filter_rules};
+ die "no file with custom filter rules found!" unless -e $filter_file;
+
+ open my $filter_handle, '<', $filter_file
+ or die "could not open $filter_file";
+ while (<$filter_handle>)
+ {
+ my $filter_line = $_;
+
+ # Skip comments and empty lines
+ next if ($filter_line =~ /^#/);
+ next if ($filter_line =~ /^\s*$/);
+
+ # Apply lines with filters.
+ note "Applying custom rule $filter_line to $dump_file";
+ my $filter = "\$dump_contents =~ $filter_line";
+ ## no critic (ProhibitStringyEval)
+ eval $filter;
+ }
+ close $filter_handle;
+ }
+
my $dump_file_filtered = "${dump_file}_filtered";
open(my $dh, '>', $dump_file_filtered)
|| die "opening $dump_file_filtered";