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
# 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";