diff --git a/contrib/intarray/bench/bench.pl b/contrib/intarray/bench/bench.pl index 92035d6..c7d9a7b 100755 --- a/contrib/intarray/bench/bench.pl +++ b/contrib/intarray/bench/bench.pl @@ -118,7 +118,8 @@ if ($opt{o}) print sprintf( "total: %.02f sec; number: %d; for one: %.03f sec; found %d docs\n", $elapsed, $b, $elapsed / $b, - $count + 1); + $count + 1 +); $dbi->disconnect; sub exec_sql diff --git a/contrib/seg/sort-segments.pl b/contrib/seg/sort-segments.pl index 04eafd9..e0e033e 100755 --- a/contrib/seg/sort-segments.pl +++ b/contrib/seg/sort-segments.pl @@ -21,7 +21,8 @@ foreach ( my $valB = pop @ar; $valB =~ s/[~<> ]+//g; $valA <=> $valB - } @rows) + } @rows + ) { print "$_\n"; } diff --git a/doc/src/sgml/mk_feature_tables.pl b/doc/src/sgml/mk_feature_tables.pl index 476e50e..503c977 100644 --- a/doc/src/sgml/mk_feature_tables.pl +++ b/doc/src/sgml/mk_feature_tables.pl @@ -33,8 +33,10 @@ print "
\n"; while (<$feat>) { chomp; - my ($feature_id, $feature_name, $subfeature_id, - $subfeature_name, $is_supported, $comments) = split /\t/; + my ( + $feature_id, $feature_name, $subfeature_id, + $subfeature_name, $is_supported, $comments + ) = split /\t/; $is_supported eq $yesno || next; diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index 7497d9c..441cf8f 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -34,7 +34,8 @@ sub ParseHeader 'Oid' => 'oid', 'NameData' => 'name', 'TransactionId' => 'xid', - 'XLogRecPtr' => 'pg_lsn'); + 'XLogRecPtr' => 'pg_lsn' + ); my %catalog; my $declaring_attributes = 0; @@ -95,10 +96,12 @@ sub ParseHeader elsif (/^DECLARE_(UNIQUE_)?INDEX\(\s*(\w+),\s*(\d+),\s*(.+)\)/) { push @{ $catalog{indexing} }, - { is_unique => $1 ? 1 : 0, + { + is_unique => $1 ? 1 : 0, index_name => $2, index_oid => $3, - index_decl => $4 }; + index_decl => $4 + }; } elsif (/^CATALOG\((\w+),(\d+),(\w+)\)/) { diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index fb61db0..d24dc5f 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -245,7 +245,8 @@ my %lookup_kind = ( pg_operator => \%operoids, pg_opfamily => \%opfoids, pg_proc => \%procoids, - pg_type => \%typeoids); + pg_type => \%typeoids +); # Open temp files @@ -631,7 +632,8 @@ sub gen_pg_attribute { name => 'cmin', type => 'cid' }, { name => 'xmax', type => 'xid' }, { name => 'cmax', type => 'cid' }, - { name => 'tableoid', type => 'oid' }); + { name => 'tableoid', type => 'oid' } + ); foreach my $attr (@SYS_ATTRS) { $attnum--; diff --git a/src/backend/utils/Gen_fmgrtab.pl b/src/backend/utils/Gen_fmgrtab.pl index 5fd5313..1cbc250 100644 --- a/src/backend/utils/Gen_fmgrtab.pl +++ b/src/backend/utils/Gen_fmgrtab.pl @@ -97,11 +97,13 @@ foreach my $row (@{ $catalog_data{pg_proc} }) next if $bki_values{prolang} ne $INTERNALlanguageId; push @fmgr, - { oid => $bki_values{oid}, + { + oid => $bki_values{oid}, strict => $bki_values{proisstrict}, retset => $bki_values{proretset}, nargs => $bki_values{pronargs}, - prosrc => $bki_values{prosrc}, }; + prosrc => $bki_values{prosrc}, + }; } # Emit headers for both files diff --git a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl b/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl index 7d497c6..672d890 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_BIG5.pl @@ -48,12 +48,14 @@ foreach my $i (@$cp950txt) && $code <= 0xf9dc) { push @$all, - { code => $code, + { + code => $code, ucs => $ucs, comment => $i->{comment}, direction => BOTH, f => $i->{f}, - l => $i->{l} }; + l => $i->{l} + }; } } diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl index 2971e64..0d3184c 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl @@ -40,8 +40,11 @@ while (<$in>) next if (($code & 0xFF) < 0xA1); next if ( - !( $code >= 0xA100 && $code <= 0xA9FF - || $code >= 0xB000 && $code <= 0xF7FF)); + !( + $code >= 0xA100 && $code <= 0xA9FF + || $code >= 0xB000 && $code <= 0xF7FF + ) + ); next if ($code >= 0xA2A1 && $code <= 0xA2B0); next if ($code >= 0xA2E3 && $code <= 0xA2E4); @@ -70,11 +73,13 @@ while (<$in>) } push @mapping, - { ucs => $ucs, + { + ucs => $ucs, code => $code, direction => BOTH, f => $in_file, - l => $. }; + l => $. + }; } close($in); diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl index 1c1152e..9ad7dd0 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl @@ -33,13 +33,15 @@ while (my $line = <$in>) my $ucs2 = hex($u2); push @all, - { direction => BOTH, + { + direction => BOTH, ucs => $ucs1, ucs_second => $ucs2, code => $code, comment => $rest, f => $in_file, - l => $. }; + l => $. + }; } elsif ($line =~ /^0x(.*)[ \t]*U\+(.*)[ \t]*#(.*)$/) { @@ -52,12 +54,14 @@ while (my $line = <$in>) next if ($code < 0x80 && $ucs < 0x80); push @all, - { direction => BOTH, + { + direction => BOTH, ucs => $ucs, code => $code, comment => $rest, f => $in_file, - l => $. }; + l => $. + }; } } close($in); diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl index 0ac1f17..dbca4ce 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl @@ -69,7 +69,8 @@ foreach my $i (@$ct932) $i->{code} = $jis | ( $jis < 0x100 ? 0x8e00 - : ($sjis >= 0xeffd ? 0x8f8080 : 0x8080)); + : ($sjis >= 0xeffd ? 0x8f8080 : 0x8080) + ); # Remember the SJIS code for later. $i->{sjis} = $sjis; @@ -115,352 +116,525 @@ foreach my $i (@mapping) } push @mapping, ( - { direction => BOTH, + { + direction => BOTH, ucs => 0x4efc, code => 0x8ff4af, - comment => '# CJK(4EFC)' }, - { direction => BOTH, + comment => '# CJK(4EFC)' + }, + { + direction => BOTH, ucs => 0x50f4, code => 0x8ff4b0, - comment => '# CJK(50F4)' }, - { direction => BOTH, + comment => '# CJK(50F4)' + }, + { + direction => BOTH, ucs => 0x51EC, code => 0x8ff4b1, - comment => '# CJK(51EC)' }, - { direction => BOTH, + comment => '# CJK(51EC)' + }, + { + direction => BOTH, ucs => 0x5307, code => 0x8ff4b2, - comment => '# CJK(5307)' }, - { direction => BOTH, + comment => '# CJK(5307)' + }, + { + direction => BOTH, ucs => 0x5324, code => 0x8ff4b3, - comment => '# CJK(5324)' }, - { direction => BOTH, + comment => '# CJK(5324)' + }, + { + direction => BOTH, ucs => 0x548A, code => 0x8ff4b5, - comment => '# CJK(548A)' }, - { direction => BOTH, + comment => '# CJK(548A)' + }, + { + direction => BOTH, ucs => 0x5759, code => 0x8ff4b6, - comment => '# CJK(5759)' }, - { direction => BOTH, + comment => '# CJK(5759)' + }, + { + direction => BOTH, ucs => 0x589E, code => 0x8ff4b9, - comment => '# CJK(589E)' }, - { direction => BOTH, + comment => '# CJK(589E)' + }, + { + direction => BOTH, ucs => 0x5BEC, code => 0x8ff4ba, - comment => '# CJK(5BEC)' }, - { direction => BOTH, + comment => '# CJK(5BEC)' + }, + { + direction => BOTH, ucs => 0x5CF5, code => 0x8ff4bb, - comment => '# CJK(5CF5)' }, - { direction => BOTH, + comment => '# CJK(5CF5)' + }, + { + direction => BOTH, ucs => 0x5D53, code => 0x8ff4bc, - comment => '# CJK(5D53)' }, - { direction => BOTH, + comment => '# CJK(5D53)' + }, + { + direction => BOTH, ucs => 0x5FB7, code => 0x8ff4be, - comment => '# CJK(5FB7)' }, - { direction => BOTH, + comment => '# CJK(5FB7)' + }, + { + direction => BOTH, ucs => 0x6085, code => 0x8ff4bf, - comment => '# CJK(6085)' }, - { direction => BOTH, + comment => '# CJK(6085)' + }, + { + direction => BOTH, ucs => 0x6120, code => 0x8ff4c0, - comment => '# CJK(6120)' }, - { direction => BOTH, + comment => '# CJK(6120)' + }, + { + direction => BOTH, ucs => 0x654E, code => 0x8ff4c1, - comment => '# CJK(654E)' }, - { direction => BOTH, + comment => '# CJK(654E)' + }, + { + direction => BOTH, ucs => 0x663B, code => 0x8ff4c2, - comment => '# CJK(663B)' }, - { direction => BOTH, + comment => '# CJK(663B)' + }, + { + direction => BOTH, ucs => 0x6665, code => 0x8ff4c3, - comment => '# CJK(6665)' }, - { direction => BOTH, + comment => '# CJK(6665)' + }, + { + direction => BOTH, ucs => 0x6801, code => 0x8ff4c6, - comment => '# CJK(6801)' }, - { direction => BOTH, + comment => '# CJK(6801)' + }, + { + direction => BOTH, ucs => 0x6A6B, code => 0x8ff4c9, - comment => '# CJK(6A6B)' }, - { direction => BOTH, + comment => '# CJK(6A6B)' + }, + { + direction => BOTH, ucs => 0x6AE2, code => 0x8ff4ca, - comment => '# CJK(6AE2)' }, - { direction => BOTH, + comment => '# CJK(6AE2)' + }, + { + direction => BOTH, ucs => 0x6DF2, code => 0x8ff4cc, - comment => '# CJK(6DF2)' }, - { direction => BOTH, + comment => '# CJK(6DF2)' + }, + { + direction => BOTH, ucs => 0x6DF8, code => 0x8ff4cb, - comment => '# CJK(6DF8)' }, - { direction => BOTH, + comment => '# CJK(6DF8)' + }, + { + direction => BOTH, ucs => 0x7028, code => 0x8ff4cd, - comment => '# CJK(7028)' }, - { direction => BOTH, + comment => '# CJK(7028)' + }, + { + direction => BOTH, ucs => 0x70BB, code => 0x8ff4ae, - comment => '# CJK(70BB)' }, - { direction => BOTH, + comment => '# CJK(70BB)' + }, + { + direction => BOTH, ucs => 0x7501, code => 0x8ff4d0, - comment => '# CJK(7501)' }, - { direction => BOTH, + comment => '# CJK(7501)' + }, + { + direction => BOTH, ucs => 0x7682, code => 0x8ff4d1, - comment => '# CJK(7682)' }, - { direction => BOTH, + comment => '# CJK(7682)' + }, + { + direction => BOTH, ucs => 0x769E, code => 0x8ff4d2, - comment => '# CJK(769E)' }, - { direction => BOTH, + comment => '# CJK(769E)' + }, + { + direction => BOTH, ucs => 0x7930, code => 0x8ff4d4, - comment => '# CJK(7930)' }, - { direction => BOTH, + comment => '# CJK(7930)' + }, + { + direction => BOTH, ucs => 0x7AE7, code => 0x8ff4d9, - comment => '# CJK(7AE7)' }, - { direction => BOTH, + comment => '# CJK(7AE7)' + }, + { + direction => BOTH, ucs => 0x7DA0, code => 0x8ff4dc, - comment => '# CJK(7DA0)' }, - { direction => BOTH, + comment => '# CJK(7DA0)' + }, + { + direction => BOTH, ucs => 0x7DD6, code => 0x8ff4dd, - comment => '# CJK(7DD6)' }, - { direction => BOTH, + comment => '# CJK(7DD6)' + }, + { + direction => BOTH, ucs => 0x8362, code => 0x8ff4df, - comment => '# CJK(8362)' }, - { direction => BOTH, + comment => '# CJK(8362)' + }, + { + direction => BOTH, ucs => 0x85B0, code => 0x8ff4e1, - comment => '# CJK(85B0)' }, - { direction => BOTH, + comment => '# CJK(85B0)' + }, + { + direction => BOTH, ucs => 0x8807, code => 0x8ff4e4, - comment => '# CJK(8807)' }, - { direction => BOTH, + comment => '# CJK(8807)' + }, + { + direction => BOTH, ucs => 0x8B7F, code => 0x8ff4e6, - comment => '# CJK(8B7F)' }, - { direction => BOTH, + comment => '# CJK(8B7F)' + }, + { + direction => BOTH, ucs => 0x8CF4, code => 0x8ff4e7, - comment => '# CJK(8CF4)' }, - { direction => BOTH, + comment => '# CJK(8CF4)' + }, + { + direction => BOTH, ucs => 0x8D76, code => 0x8ff4e8, - comment => '# CJK(8D76)' }, - { direction => BOTH, + comment => '# CJK(8D76)' + }, + { + direction => BOTH, ucs => 0x90DE, code => 0x8ff4ec, - comment => '# CJK(90DE)' }, - { direction => BOTH, + comment => '# CJK(90DE)' + }, + { + direction => BOTH, ucs => 0x9115, code => 0x8ff4ee, - comment => '# CJK(9115)' }, - { direction => BOTH, + comment => '# CJK(9115)' + }, + { + direction => BOTH, ucs => 0x9592, code => 0x8ff4f1, - comment => '# CJK(9592)' }, - { direction => BOTH, + comment => '# CJK(9592)' + }, + { + direction => BOTH, ucs => 0x973B, code => 0x8ff4f4, - comment => '# CJK(973B)' }, - { direction => BOTH, + comment => '# CJK(973B)' + }, + { + direction => BOTH, ucs => 0x974D, code => 0x8ff4f5, - comment => '# CJK(974D)' }, - { direction => BOTH, + comment => '# CJK(974D)' + }, + { + direction => BOTH, ucs => 0x9751, code => 0x8ff4f6, - comment => '# CJK(9751)' }, - { direction => BOTH, + comment => '# CJK(9751)' + }, + { + direction => BOTH, ucs => 0x999E, code => 0x8ff4fa, - comment => '# CJK(999E)' }, - { direction => BOTH, + comment => '# CJK(999E)' + }, + { + direction => BOTH, ucs => 0x9AD9, code => 0x8ff4fb, - comment => '# CJK(9AD9)' }, - { direction => BOTH, + comment => '# CJK(9AD9)' + }, + { + direction => BOTH, ucs => 0x9B72, code => 0x8ff4fc, - comment => '# CJK(9B72)' }, - { direction => BOTH, + comment => '# CJK(9B72)' + }, + { + direction => BOTH, ucs => 0x9ED1, code => 0x8ff4fe, - comment => '# CJK(9ED1)' }, - { direction => BOTH, + comment => '# CJK(9ED1)' + }, + { + direction => BOTH, ucs => 0xF929, code => 0x8ff4c5, - comment => '# CJK COMPATIBILITY IDEOGRAPH-F929' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-F929' + }, + { + direction => BOTH, ucs => 0xF9DC, code => 0x8ff4f2, - comment => '# CJK COMPATIBILITY IDEOGRAPH-F9DC' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-F9DC' + }, + { + direction => BOTH, ucs => 0xFA0E, code => 0x8ff4b4, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA0E' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA0E' + }, + { + direction => BOTH, ucs => 0xFA0F, code => 0x8ff4b7, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA0F' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA0F' + }, + { + direction => BOTH, ucs => 0xFA10, code => 0x8ff4b8, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA10' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA10' + }, + { + direction => BOTH, ucs => 0xFA11, code => 0x8ff4bd, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA11' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA11' + }, + { + direction => BOTH, ucs => 0xFA12, code => 0x8ff4c4, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA12' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA12' + }, + { + direction => BOTH, ucs => 0xFA13, code => 0x8ff4c7, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA13' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA13' + }, + { + direction => BOTH, ucs => 0xFA14, code => 0x8ff4c8, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA14' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA14' + }, + { + direction => BOTH, ucs => 0xFA15, code => 0x8ff4ce, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA15' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA15' + }, + { + direction => BOTH, ucs => 0xFA16, code => 0x8ff4cf, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA16' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA16' + }, + { + direction => BOTH, ucs => 0xFA17, code => 0x8ff4d3, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA17' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA17' + }, + { + direction => BOTH, ucs => 0xFA18, code => 0x8ff4d5, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA18' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA18' + }, + { + direction => BOTH, ucs => 0xFA19, code => 0x8ff4d6, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA19' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA19' + }, + { + direction => BOTH, ucs => 0xFA1A, code => 0x8ff4d7, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1A' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1A' + }, + { + direction => BOTH, ucs => 0xFA1B, code => 0x8ff4d8, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1B' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1B' + }, + { + direction => BOTH, ucs => 0xFA1C, code => 0x8ff4da, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1C' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1C' + }, + { + direction => BOTH, ucs => 0xFA1D, code => 0x8ff4db, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1D' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1D' + }, + { + direction => BOTH, ucs => 0xFA1E, code => 0x8ff4de, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1E' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1E' + }, + { + direction => BOTH, ucs => 0xFA1F, code => 0x8ff4e0, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1F' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA1F' + }, + { + direction => BOTH, ucs => 0xFA20, code => 0x8ff4e2, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA20' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA20' + }, + { + direction => BOTH, ucs => 0xFA21, code => 0x8ff4e3, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA21' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA21' + }, + { + direction => BOTH, ucs => 0xFA22, code => 0x8ff4e5, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA22' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA22' + }, + { + direction => BOTH, ucs => 0xFA23, code => 0x8ff4e9, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA23' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA23' + }, + { + direction => BOTH, ucs => 0xFA24, code => 0x8ff4ea, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA24' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA24' + }, + { + direction => BOTH, ucs => 0xFA25, code => 0x8ff4eb, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA25' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA25' + }, + { + direction => BOTH, ucs => 0xFA26, code => 0x8ff4ed, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA26' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA26' + }, + { + direction => BOTH, ucs => 0xFA27, code => 0x8ff4ef, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA27' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA27' + }, + { + direction => BOTH, ucs => 0xFA28, code => 0x8ff4f0, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA28' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA28' + }, + { + direction => BOTH, ucs => 0xFA29, code => 0x8ff4f3, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA29' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA29' + }, + { + direction => BOTH, ucs => 0xFA2A, code => 0x8ff4f7, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2A' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2A' + }, + { + direction => BOTH, ucs => 0xFA2B, code => 0x8ff4f8, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2B' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2B' + }, + { + direction => BOTH, ucs => 0xFA2C, code => 0x8ff4f9, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2C' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2C' + }, + { + direction => BOTH, ucs => 0xFA2D, code => 0x8ff4fd, - comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2D' }, - { direction => BOTH, + comment => '# CJK COMPATIBILITY IDEOGRAPH-FA2D' + }, + { + direction => BOTH, ucs => 0xFF07, code => 0x8ff4a9, - comment => '# FULLWIDTH APOSTROPHE' }, - { direction => BOTH, + comment => '# FULLWIDTH APOSTROPHE' + }, + { + direction => BOTH, ucs => 0xFFE4, code => 0x8fa2c3, - comment => '# FULLWIDTH BROKEN BAR' }, + comment => '# FULLWIDTH BROKEN BAR' + }, # additional conversions for EUC_JP -> utf-8 conversion - { direction => TO_UNICODE, + { + direction => TO_UNICODE, ucs => 0x2116, code => 0x8ff4ac, - comment => '# NUMERO SIGN' }, - { direction => TO_UNICODE, + comment => '# NUMERO SIGN' + }, + { + direction => TO_UNICODE, ucs => 0x2121, code => 0x8ff4ad, - comment => '# TELEPHONE SIGN' }, - { direction => TO_UNICODE, + comment => '# TELEPHONE SIGN' + }, + { + direction => TO_UNICODE, ucs => 0x3231, code => 0x8ff4ab, - comment => '# PARENTHESIZED IDEOGRAPH STOCK' }); + comment => '# PARENTHESIZED IDEOGRAPH STOCK' + } +); print_conversion_tables($this_script, "EUC_JP", \@mapping); diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl index 4d6a3ca..e0045ab 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl @@ -32,23 +32,31 @@ foreach my $i (@$mapping) # Some extra characters that are not in KSX1001.TXT push @$mapping, - ( { direction => BOTH, + ( + { + direction => BOTH, ucs => 0x20AC, code => 0xa2e6, comment => '# EURO SIGN', f => $this_script, - l => __LINE__ }, - { direction => BOTH, + l => __LINE__ + }, + { + direction => BOTH, ucs => 0x00AE, code => 0xa2e7, comment => '# REGISTERED SIGN', f => $this_script, - l => __LINE__ }, - { direction => BOTH, + l => __LINE__ + }, + { + direction => BOTH, ucs => 0x327E, code => 0xa2e8, comment => '# CIRCLED HANGUL IEUNG U', f => $this_script, - l => __LINE__ }); + l => __LINE__ + } + ); print_conversion_tables($this_script, "EUC_KR", $mapping); diff --git a/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl b/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl index 89f3cd7..98d4156d 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl @@ -53,12 +53,14 @@ foreach my $i (@$mapping) if ($origcode >= 0x12121 && $origcode <= 0x20000) { push @extras, - { ucs => $i->{ucs}, + { + ucs => $i->{ucs}, code => ($i->{code} + 0x8ea10000), rest => $i->{rest}, direction => TO_UNICODE, f => $i->{f}, - l => $i->{l} }; + l => $i->{l} + }; } } diff --git a/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl b/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl index ec184d7..65ffee3 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_GB18030.pl @@ -36,11 +36,13 @@ while (<$in>) if ($code >= 0x80 && $ucs >= 0x0080) { push @mapping, - { ucs => $ucs, + { + ucs => $ucs, code => $code, direction => BOTH, f => $in_file, - l => $. }; + l => $. + }; } } close($in); diff --git a/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl b/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl index b580373..ee55961 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_JOHAB.pl @@ -26,23 +26,31 @@ my $mapping = &read_source("JOHAB.TXT"); # Some extra characters that are not in JOHAB.TXT push @$mapping, - ( { direction => BOTH, + ( + { + direction => BOTH, ucs => 0x20AC, code => 0xd9e6, comment => '# EURO SIGN', f => $this_script, - l => __LINE__ }, - { direction => BOTH, + l => __LINE__ + }, + { + direction => BOTH, ucs => 0x00AE, code => 0xd9e7, comment => '# REGISTERED SIGN', f => $this_script, - l => __LINE__ }, - { direction => BOTH, + l => __LINE__ + }, + { + direction => BOTH, ucs => 0x327E, code => 0xd9e8, comment => '# CIRCLED HANGUL IEUNG U', f => $this_script, - l => __LINE__ }); + l => __LINE__ + } + ); print_conversion_tables($this_script, "JOHAB", $mapping); diff --git a/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl b/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl index d153e4c..bb84458 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl @@ -33,13 +33,15 @@ while (my $line = <$in>) my $ucs2 = hex($u2); push @mapping, - { code => $code, + { + code => $code, ucs => $ucs1, ucs_second => $ucs2, comment => $rest, direction => BOTH, f => $in_file, - l => $. }; + l => $. + }; } elsif ($line =~ /^0x(.*)[ \t]*U\+(.*)[ \t]*#(.*)$/) { @@ -68,12 +70,14 @@ while (my $line = <$in>) } push @mapping, - { code => $code, + { + code => $code, ucs => $ucs, comment => $rest, direction => $direction, f => $in_file, - l => $. }; + l => $. + }; } } close($in); diff --git a/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl b/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl index a50f6f3..b8ef979 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_SJIS.pl @@ -21,7 +21,8 @@ my $mapping = read_source("CP932.TXT"); my @reject_sjis = ( 0xed40 .. 0xeefc, 0x8754 .. 0x875d, 0x878a, 0x8782, 0x8784, 0xfa5b, 0xfa54, 0x8790 .. 0x8792, - 0x8795 .. 0x8797, 0x879a .. 0x879c); + 0x8795 .. 0x8797, 0x879a .. 0x879c +); foreach my $i (@$mapping) { @@ -36,53 +37,71 @@ foreach my $i (@$mapping) # Add these UTF8->SJIS pairs to the table. push @$mapping, - ( { direction => FROM_UNICODE, + ( + { + direction => FROM_UNICODE, ucs => 0x00a2, code => 0x8191, comment => '# CENT SIGN', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x00a3, code => 0x8192, comment => '# POUND SIGN', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x00a5, code => 0x5c, comment => '# YEN SIGN', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x00ac, code => 0x81ca, comment => '# NOT SIGN', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x2016, code => 0x8161, comment => '# DOUBLE VERTICAL LINE', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x203e, code => 0x7e, comment => '# OVERLINE', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x2212, code => 0x817c, comment => '# MINUS SIGN', f => $this_script, - l => __LINE__ }, - { direction => FROM_UNICODE, + l => __LINE__ + }, + { + direction => FROM_UNICODE, ucs => 0x301c, code => 0x8160, comment => '# WAVE DASH', f => $this_script, - l => __LINE__ }); + l => __LINE__ + } + ); print_conversion_tables($this_script, "SJIS", $mapping); diff --git a/src/backend/utils/mb/Unicode/UCS_to_UHC.pl b/src/backend/utils/mb/Unicode/UCS_to_UHC.pl index dc9fb75..4231aaf 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_UHC.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_UHC.pl @@ -39,22 +39,26 @@ while (<$in>) if ($code >= 0x80 && $ucs >= 0x0080) { push @mapping, - { ucs => $ucs, + { + ucs => $ucs, code => $code, direction => BOTH, f => $in_file, - l => $. }; + l => $. + }; } } close($in); # One extra character that's not in the source file. push @mapping, - { direction => BOTH, + { + direction => BOTH, code => 0xa2e8, ucs => 0x327e, comment => 'CIRCLED HANGUL IEUNG U', f => $this_script, - l => __LINE__ }; + l => __LINE__ + }; print_conversion_tables($this_script, "UHC", \@mapping); diff --git a/src/backend/utils/mb/Unicode/UCS_to_most.pl b/src/backend/utils/mb/Unicode/UCS_to_most.pl index 4453449..e302250 100755 --- a/src/backend/utils/mb/Unicode/UCS_to_most.pl +++ b/src/backend/utils/mb/Unicode/UCS_to_most.pl @@ -47,7 +47,8 @@ my %filename = ( 'ISO8859_16' => '8859-16.TXT', 'KOI8R' => 'KOI8-R.TXT', 'KOI8U' => 'KOI8-U.TXT', - 'GBK' => 'CP936.TXT'); + 'GBK' => 'CP936.TXT' +); # make maps for all encodings if not specified my @charsets = (scalar(@ARGV) > 0) ? @ARGV : sort keys(%filename); diff --git a/src/backend/utils/mb/Unicode/convutils.pm b/src/backend/utils/mb/Unicode/convutils.pm index 03151fa..12d279f 100644 --- a/src/backend/utils/mb/Unicode/convutils.pm +++ b/src/backend/utils/mb/Unicode/convutils.pm @@ -18,7 +18,8 @@ use constant { NONE => 0, TO_UNICODE => 1, FROM_UNICODE => 2, - BOTH => 3 }; + BOTH => 3 +}; ####################################################################### # read_source - common routine to read source file @@ -56,7 +57,8 @@ sub read_source comment => $4, direction => BOTH, f => $fname, - l => $. }; + l => $. + }; # Ignore pure ASCII mappings. PostgreSQL character conversion code # never even passes these to the conversion code. @@ -370,9 +372,11 @@ sub print_radix_table } unshift @segments, - { header => "Dummy map, for invalid values", + { + header => "Dummy map, for invalid values", min_idx => 0, - max_idx => $widest_range }; + max_idx => $widest_range + }; ### ### Eliminate overlapping zeros @@ -395,7 +399,8 @@ sub print_radix_table for ( my $i = $seg->{max_idx}; $i >= $seg->{min_idx} && !$seg->{values}->{$i}; - $i--) + $i-- + ) { $this_trail_zeros++; } @@ -405,7 +410,8 @@ sub print_radix_table for ( my $i = $nextseg->{min_idx}; $i <= $nextseg->{max_idx} && !$nextseg->{values}->{$i}; - $i++) + $i++ + ) { $next_lead_zeros++; } @@ -655,12 +661,14 @@ sub build_segments_recurse if ($level == $depth) { push @segments, - { header => $header . ", leaf: ${path}xx", + { + header => $header . ", leaf: ${path}xx", label => $label, level => $level, depth => $depth, path => $path, - values => $map }; + values => $map + }; } else { @@ -678,12 +686,14 @@ sub build_segments_recurse } push @segments, - { header => $header . ", byte #$level: ${path}xx", + { + header => $header . ", byte #$level: ${path}xx", label => $label, level => $level, depth => $depth, path => $path, - values => \%children }; + values => \%children + }; } return @segments; } @@ -776,7 +786,8 @@ sub make_charmap_combined code => $c->{code}, comment => $c->{comment}, f => $c->{f}, - l => $c->{l} }; + l => $c->{l} + }; push @combined, $entry; } } diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl index 599460c..4fa4f94 100644 --- a/src/bin/initdb/t/001_initdb.pl +++ b/src/bin/initdb/t/001_initdb.pl @@ -25,15 +25,18 @@ mkdir $xlogdir; mkdir "$xlogdir/lost+found"; command_fails( [ 'initdb', '-X', $xlogdir, $datadir ], - 'existing nonempty xlog directory'); + 'existing nonempty xlog directory' +); rmdir "$xlogdir/lost+found"; command_fails( [ 'initdb', '-X', 'pgxlog', $datadir ], - 'relative xlog directory not allowed'); + 'relative xlog directory not allowed' +); command_fails( [ 'initdb', '-U', 'pg_test', $datadir ], - 'role names cannot begin with "pg_"'); + 'role names cannot begin with "pg_"' +); mkdir $datadir; @@ -72,7 +75,8 @@ SKIP: command_ok( [ 'initdb', '-g', $datadir_group ], - 'successful creation with group access'); + 'successful creation with group access' + ); ok(check_mode_recursive($datadir_group, 0750, 0640), 'check PGDATA permissions'); diff --git a/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl b/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl index fdedd2f..4c5b855 100644 --- a/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl +++ b/src/bin/pg_archivecleanup/t/010_pg_archivecleanup.pl @@ -11,7 +11,8 @@ my $tempdir = TestLib::tempdir; my @walfiles = ( '00000001000000370000000C.gz', '00000001000000370000000D', - '00000001000000370000000E', '00000001000000370000000F.partial',); + '00000001000000370000000E', '00000001000000370000000F.partial', +); sub create_files { @@ -28,27 +29,32 @@ create_files(); command_fails_like( ['pg_archivecleanup'], qr/must specify archive location/, - 'fails if archive location is not specified'); + 'fails if archive location is not specified' +); command_fails_like( [ 'pg_archivecleanup', $tempdir ], qr/must specify oldest kept WAL file/, - 'fails if oldest kept WAL file name is not specified'); + 'fails if oldest kept WAL file name is not specified' +); command_fails_like( [ 'pg_archivecleanup', 'notexist', 'foo' ], qr/archive location .* does not exist/, - 'fails if archive location does not exist'); + 'fails if archive location does not exist' +); command_fails_like( [ 'pg_archivecleanup', $tempdir, 'foo', 'bar' ], qr/too many command-line arguments/, - 'fails with too many command-line arguments'); + 'fails with too many command-line arguments' +); command_fails_like( [ 'pg_archivecleanup', $tempdir, 'foo' ], qr/invalid file name argument/, - 'fails with invalid restart file name'); + 'fails with invalid restart file name' +); { # like command_like but checking stderr @@ -59,7 +65,8 @@ command_fails_like( like( $stderr, qr/$walfiles[1].*would be removed/, - "pg_archivecleanup dry run: matches"); + "pg_archivecleanup dry run: matches" + ); foreach my $fn (@walfiles) { ok(-f "$tempdir/$fn", "$fn not removed"); @@ -73,9 +80,12 @@ sub run_check create_files(); command_ok( - [ 'pg_archivecleanup', '-x', '.gz', $tempdir, - $walfiles[2] . $suffix ], - "$test_name: runs"); + [ + 'pg_archivecleanup', '-x', '.gz', $tempdir, + $walfiles[2] . $suffix + ], + "$test_name: runs" + ); ok(!-f "$tempdir/$walfiles[0]", "$test_name: first older WAL file was cleaned up"); diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index d7ab36b..05b0bbc 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -40,7 +40,8 @@ system_or_bail 'pg_ctl', '-D', $pgdata, 'reload'; $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backup" ], - 'pg_basebackup fails because of WAL configuration'); + 'pg_basebackup fails because of WAL configuration' +); ok(!-d "$tempdir/backup", 'backup directory was cleaned up'); @@ -119,7 +120,8 @@ SKIP: is_deeply( [ sort(slurp_dir("$tempdir/backup/pg_wal/")) ], [ sort qw(. .. archive_status) ], - 'no WAL files copied'); + 'no WAL files copied' +); # Contents of these directories should not be copied. foreach my $dirname ( @@ -129,13 +131,15 @@ foreach my $dirname ( is_deeply( [ sort(slurp_dir("$tempdir/backup/$dirname/")) ], [ sort qw(. ..) ], - "contents of $dirname/ not copied"); + "contents of $dirname/ not copied" + ); } # These files should not be copied. foreach my $filename ( qw(postgresql.auto.conf.tmp postmaster.opts postmaster.pid tablespace_map current_logfiles.tmp - global/pg_internal.init)) + global/pg_internal.init) + ) { ok(!-f "$tempdir/backup/$filename", "$filename not copied"); } @@ -143,14 +147,18 @@ foreach my $filename ( # Unlogged relation forks other than init should not be copied ok(-f "$tempdir/backup/${baseUnloggedPath}_init", 'unlogged init fork in backup'); -ok( !-f "$tempdir/backup/$baseUnloggedPath", - 'unlogged main fork not in backup'); +ok( + !-f "$tempdir/backup/$baseUnloggedPath", + 'unlogged main fork not in backup' +); # Temp relations should not be copied. foreach my $filename (@tempRelationFiles) { - ok( !-f "$tempdir/backup/base/$postgresOid/$filename", - "base/$postgresOid/$filename not copied"); + ok( + !-f "$tempdir/backup/base/$postgresOid/$filename", + "base/$postgresOid/$filename not copied" + ); } # Make sure existing backup_label was ignored. @@ -159,9 +167,12 @@ isnt(slurp_file("$tempdir/backup/backup_label"), rmtree("$tempdir/backup"); $node->command_ok( - [ 'pg_basebackup', '-D', "$tempdir/backup2", '--waldir', - "$tempdir/xlog2" ], - 'separate xlog directory'); + [ + 'pg_basebackup', '-D', "$tempdir/backup2", '--waldir', + "$tempdir/xlog2" + ], + 'separate xlog directory' +); ok(-f "$tempdir/backup2/PG_VERSION", 'backup was created'); ok(-d "$tempdir/xlog2/", 'xlog directory was created'); rmtree("$tempdir/backup2"); @@ -179,9 +190,12 @@ $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', "-T/foo=" ], '-T with empty new directory fails'); $node->command_fails( - [ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', - "-T/foo=/bar=/baz" ], - '-T with multiple = fails'); + [ + 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', + "-T/foo=/bar=/baz" + ], + '-T with multiple = fails' +); $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', "-Tfoo=/bar" ], '-T with old directory not absolute fails'); @@ -254,8 +268,10 @@ SKIP: q{select pg_relation_filepath('tblspc1_unlogged')}); # Make sure main and init forks exist - ok( -f "$pgdata/${tblspc1UnloggedPath}_init", - 'unlogged init fork in tablespace'); + ok( + -f "$pgdata/${tblspc1UnloggedPath}_init", + 'unlogged init fork in tablespace' + ); ok(-f "$pgdata/$tblspc1UnloggedPath", 'unlogged main fork in tablespace'); # Create files that look like temporary relations to ensure they are ignored @@ -265,7 +281,11 @@ SKIP: dirname( dirname( $node->safe_psql( - 'postgres', q{select pg_relation_filepath('test1')})))); + 'postgres', q{select pg_relation_filepath('test1')} + ) + ) + ) + ); foreach my $filename (@tempRelationFiles) { @@ -276,20 +296,28 @@ SKIP: $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp' ], - 'plain format with tablespaces fails without tablespace mapping'); + 'plain format with tablespaces fails without tablespace mapping' + ); $node->command_ok( - [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp', - "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc1" ], - 'plain format with tablespaces succeeds with tablespace mapping'); + [ + 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp', + "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc1" + ], + 'plain format with tablespaces succeeds with tablespace mapping' + ); ok(-d "$tempdir/tbackup/tblspc1", 'tablespace was relocated'); opendir(my $dh, "$pgdata/pg_tblspc") or die; - ok( ( grep { + ok( + ( + grep { -l "$tempdir/backup1/pg_tblspc/$_" and readlink "$tempdir/backup1/pg_tblspc/$_" eq "$tempdir/tbackup/tblspc1" - } readdir($dh)), - "tablespace symlink was updated"); + } readdir($dh) + ), + "tablespace symlink was updated" + ); closedir $dh; # Group access should be enabled on all backup files @@ -308,8 +336,10 @@ SKIP: # Temp relations should not be copied. foreach my $filename (@tempRelationFiles) { - ok( !-f "$tempdir/tbackup/tblspc1/$tblSpc1Id/$postgresOid/$filename", - "[tblspc1]/$postgresOid/$filename not copied"); + ok( + !-f "$tempdir/tbackup/tblspc1/$tblSpc1Id/$postgresOid/$filename", + "[tblspc1]/$postgresOid/$filename not copied" + ); # Also remove temp relation files or tablespace drop will fail. my $filepath = @@ -319,8 +349,10 @@ SKIP: or BAIL_OUT("unable to unlink $filepath"); } - ok( -d "$tempdir/backup1/pg_replslot", - 'pg_replslot symlink copied as directory'); + ok( + -d "$tempdir/backup1/pg_replslot", + 'pg_replslot symlink copied as directory' + ); rmtree("$tempdir/backup1"); mkdir "$tempdir/tbl=spc2"; @@ -330,9 +362,12 @@ SKIP: $node->safe_psql('postgres', "CREATE TABLESPACE tblspc2 LOCATION '$shorter_tempdir/tbl=spc2';"); $node->command_ok( - [ 'pg_basebackup', '-D', "$tempdir/backup3", '-Fp', - "-T$shorter_tempdir/tbl\\=spc2=$tempdir/tbackup/tbl\\=spc2" ], - 'mapping tablespace with = sign in path'); + [ + 'pg_basebackup', '-D', "$tempdir/backup3", '-Fp', + "-T$shorter_tempdir/tbl\\=spc2=$tempdir/tbackup/tbl\\=spc2" + ], + 'mapping tablespace with = sign in path' + ); ok(-d "$tempdir/tbackup/tbl=spc2", 'tablespace with = sign was relocated'); $node->safe_psql('postgres', "DROP TABLESPACE tblspc2;"); @@ -358,15 +393,18 @@ my $port = $node->port; like( $recovery_conf, qr/^standby_mode = 'on'\n/m, - 'recovery.conf sets standby_mode'); + 'recovery.conf sets standby_mode' +); like( $recovery_conf, qr/^primary_conninfo = '.*port=$port.*'\n/m, - 'recovery.conf sets primary_conninfo'); + 'recovery.conf sets primary_conninfo' +); $node->command_ok( [ 'pg_basebackup', '-D', "$tempdir/backupxd" ], - 'pg_basebackup runs in default xlog mode'); + 'pg_basebackup runs in default xlog mode' +); ok(grep(/^[0-9A-F]{24}$/, slurp_dir("$tempdir/backupxd/pg_wal")), 'WAL files copied'); rmtree("$tempdir/backupxd"); @@ -389,52 +427,66 @@ $node->command_ok( ok(-f "$tempdir/backupxst/pg_wal.tar", "tar file was created"); rmtree("$tempdir/backupxst"); $node->command_ok( - [ 'pg_basebackup', '-D', + [ + 'pg_basebackup', '-D', "$tempdir/backupnoslot", '-X', - 'stream', '--no-slot' ], - 'pg_basebackup -X stream runs with --no-slot'); + 'stream', '--no-slot' + ], + 'pg_basebackup -X stream runs with --no-slot' +); rmtree("$tempdir/backupnoslot"); $node->command_fails( - [ 'pg_basebackup', '-D', + [ + 'pg_basebackup', '-D', "$tempdir/backupxs_sl_fail", '-X', 'stream', '-S', - 'slot0' ], - 'pg_basebackup fails with nonexistent replication slot'); + 'slot0' + ], + 'pg_basebackup fails with nonexistent replication slot' +); $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C' ], 'pg_basebackup -C fails without slot name'); $node->command_fails( - [ 'pg_basebackup', '-D', + [ + 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C', '-S', 'slot0', - '--no-slot' ], - 'pg_basebackup fails with -C -S --no-slot'); + '--no-slot' + ], + 'pg_basebackup fails with -C -S --no-slot' +); $node->command_ok( [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot", '-C', '-S', 'slot0' ], - 'pg_basebackup -C runs'); + 'pg_basebackup -C runs' +); rmtree("$tempdir/backupxs_slot"); -is( $node->safe_psql( +is( + $node->safe_psql( 'postgres', q{SELECT slot_name FROM pg_replication_slots WHERE slot_name = 'slot0'} ), 'slot0', - 'replication slot was created'); + 'replication slot was created' +); isnt( $node->safe_psql( 'postgres', q{SELECT restart_lsn FROM pg_replication_slots WHERE slot_name = 'slot0'} ), '', - 'restart LSN of new slot is not null'); + 'restart LSN of new slot is not null' +); $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/backupxs_slot1", '-C', '-S', 'slot0' ], - 'pg_basebackup fails with -C -S and a previously existing slot'); + 'pg_basebackup fails with -C -S and a previously existing slot' +); $node->safe_psql('postgres', q{SELECT * FROM pg_create_physical_replication_slot('slot1')}); @@ -444,11 +496,15 @@ my $lsn = $node->safe_psql('postgres', is($lsn, '', 'restart LSN of new slot is null'); $node->command_fails( [ 'pg_basebackup', '-D', "$tempdir/fail", '-S', 'slot1', '-X', 'none' ], - 'pg_basebackup with replication slot fails without WAL streaming'); + 'pg_basebackup with replication slot fails without WAL streaming' +); $node->command_ok( - [ 'pg_basebackup', '-D', "$tempdir/backupxs_sl", '-X', - 'stream', '-S', 'slot1' ], - 'pg_basebackup -X stream with replication slot runs'); + [ + 'pg_basebackup', '-D', "$tempdir/backupxs_sl", '-X', + 'stream', '-S', 'slot1' + ], + 'pg_basebackup -X stream with replication slot runs' +); $lsn = $node->safe_psql('postgres', q{SELECT restart_lsn FROM pg_replication_slots WHERE slot_name = 'slot1'} ); @@ -456,13 +512,17 @@ like($lsn, qr!^0/[0-9A-Z]{7,8}$!, 'restart LSN of slot has advanced'); rmtree("$tempdir/backupxs_sl"); $node->command_ok( - [ 'pg_basebackup', '-D', "$tempdir/backupxs_sl_R", '-X', - 'stream', '-S', 'slot1', '-R' ], - 'pg_basebackup with replication slot and -R runs'); + [ + 'pg_basebackup', '-D', "$tempdir/backupxs_sl_R", '-X', + 'stream', '-S', 'slot1', '-R' + ], + 'pg_basebackup with replication slot and -R runs' +); like( slurp_file("$tempdir/backupxs_sl_R/recovery.conf"), qr/^primary_slot_name = 'slot1'\n/m, - 'recovery.conf sets primary_slot_name'); + 'recovery.conf sets primary_slot_name' +); my $checksum = $node->safe_psql('postgres', 'SHOW data_checksums;'); is($checksum, 'on', 'checksums are enabled'); @@ -493,7 +553,8 @@ $node->command_checks_all( 1, [qr{^$}], [qr/^WARNING.*checksum verification failed/s], - 'pg_basebackup reports checksum mismatch'); + 'pg_basebackup reports checksum mismatch' +); rmtree("$tempdir/backup_corrupt"); # induce further corruption in 5 more blocks @@ -513,7 +574,8 @@ $node->command_checks_all( 1, [qr{^$}], [qr/^WARNING.*further.*failures.*will.not.be.reported/s], - 'pg_basebackup does not report more than 5 checksum mismatches'); + 'pg_basebackup does not report more than 5 checksum mismatches' +); rmtree("$tempdir/backup_corrupt2"); # induce corruption in a second file @@ -529,13 +591,15 @@ $node->command_checks_all( 1, [qr{^$}], [qr/^WARNING.*7 total checksum verification failures/s], - 'pg_basebackup correctly report the total number of checksum mismatches'); + 'pg_basebackup correctly report the total number of checksum mismatches' +); rmtree("$tempdir/backup_corrupt3"); # do not verify checksums, should return ok $node->command_ok( [ 'pg_basebackup', '-D', "$tempdir/backup_corrupt4", '-k' ], - 'pg_basebackup with -k does not report checksum mismatch'); + 'pg_basebackup with -k does not report checksum mismatch' +); rmtree("$tempdir/backup_corrupt4"); $node->safe_psql('postgres', "DROP TABLE corrupt1;"); diff --git a/src/bin/pg_basebackup/t/020_pg_receivewal.pl b/src/bin/pg_basebackup/t/020_pg_receivewal.pl index 0793f9c..2ef237f 100644 --- a/src/bin/pg_basebackup/t/020_pg_receivewal.pl +++ b/src/bin/pg_basebackup/t/020_pg_receivewal.pl @@ -23,10 +23,12 @@ $primary->command_fails(['pg_receivewal'], 'pg_receivewal needs target directory specified'); $primary->command_fails( [ 'pg_receivewal', '-D', $stream_dir, '--create-slot', '--drop-slot' ], - 'failure if both --create-slot and --drop-slot specified'); + 'failure if both --create-slot and --drop-slot specified' +); $primary->command_fails( [ 'pg_receivewal', '-D', $stream_dir, '--create-slot' ], - 'failure if --create-slot specified without --slot'); + 'failure if --create-slot specified without --slot' +); $primary->command_fails( [ 'pg_receivewal', '-D', $stream_dir, '--synchronous', '--no-sync' ], 'failure if --synchronous specified with --no-sync'); @@ -57,9 +59,12 @@ $primary->psql('postgres', # Stream up to the given position. $primary->command_ok( - [ 'pg_receivewal', '-D', $stream_dir, '--verbose', - '--endpos', $nextlsn, '--synchronous', '--no-loop' ], - 'streaming some WAL with --synchronous'); + [ + 'pg_receivewal', '-D', $stream_dir, '--verbose', + '--endpos', $nextlsn, '--synchronous', '--no-loop' + ], + 'streaming some WAL with --synchronous' +); # Permissions on WAL files should be default SKIP: diff --git a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl index e9d0941..c2e4e70 100644 --- a/src/bin/pg_basebackup/t/030_pg_recvlogical.pl +++ b/src/bin/pg_basebackup/t/030_pg_recvlogical.pl @@ -19,7 +19,8 @@ max_replication_slots = 4 max_wal_senders = 4 log_min_messages = 'debug1' log_error_verbosity = verbose -}); +} +); $node->dump_info; $node->start; @@ -29,16 +30,22 @@ $node->command_fails([ 'pg_recvlogical', '-S', 'test' ], $node->command_fails([ 'pg_recvlogical', '-S', 'test', '-d', 'postgres' ], 'pg_recvlogical needs an action'); $node->command_fails( - [ 'pg_recvlogical', '-S', + [ + 'pg_recvlogical', '-S', 'test', '-d', - $node->connstr('postgres'), '--start' ], - 'no destination file'); + $node->connstr('postgres'), '--start' + ], + 'no destination file' +); $node->command_ok( - [ 'pg_recvlogical', '-S', + [ + 'pg_recvlogical', '-S', 'test', '-d', - $node->connstr('postgres'), '--create-slot' ], - 'slot created'); + $node->connstr('postgres'), '--create-slot' + ], + 'slot created' +); my $slot = $node->slot('test'); isnt($slot->{'restart_lsn'}, '', 'restart lsn is defined for new slot'); @@ -51,6 +58,9 @@ my $nextlsn = chomp($nextlsn); $node->command_ok( - [ 'pg_recvlogical', '-S', 'test', '-d', $node->connstr('postgres'), - '--start', '--endpos', "$nextlsn", '--no-loop', '-f', '-' ], - 'replayed a transaction'); + [ + 'pg_recvlogical', '-S', 'test', '-d', $node->connstr('postgres'), + '--start', '--endpos', "$nextlsn", '--no-loop', '-f', '-' + ], + 'replayed a transaction' +); diff --git a/src/bin/pg_controldata/t/001_pg_controldata.pl b/src/bin/pg_controldata/t/001_pg_controldata.pl index a9862ae..e871d73 100644 --- a/src/bin/pg_controldata/t/001_pg_controldata.pl +++ b/src/bin/pg_controldata/t/001_pg_controldata.pl @@ -33,7 +33,10 @@ close $fh; command_checks_all( [ 'pg_controldata', $node->data_dir ], 0, - [ qr/WARNING: Calculated CRC checksum does not match value stored in file/, - qr/WARNING: invalid WAL segment size/ ], + [ + qr/WARNING: Calculated CRC checksum does not match value stored in file/, + qr/WARNING: invalid WAL segment size/ + ], [qr/^$/], - 'pg_controldata with corrupted pg_control'); + 'pg_controldata with corrupted pg_control' +); diff --git a/src/bin/pg_ctl/t/001_start_stop.pl b/src/bin/pg_ctl/t/001_start_stop.pl index 5bbb799..50a57d0 100644 --- a/src/bin/pg_ctl/t/001_start_stop.pl +++ b/src/bin/pg_ctl/t/001_start_stop.pl @@ -36,7 +36,8 @@ else close $conf; my $ctlcmd = [ 'pg_ctl', 'start', '-D', "$tempdir/data", '-l', - "$TestLib::log_path/001_start_stop_server.log" ]; + "$TestLib::log_path/001_start_stop_server.log" +]; if ($Config{osname} ne 'msys') { command_like($ctlcmd, qr/done.*server started/s, 'pg_ctl start'); diff --git a/src/bin/pg_ctl/t/003_promote.pl b/src/bin/pg_ctl/t/003_promote.pl index ecb294b..76bd83d 100644 --- a/src/bin/pg_ctl/t/003_promote.pl +++ b/src/bin/pg_ctl/t/003_promote.pl @@ -10,7 +10,8 @@ my $tempdir = TestLib::tempdir; command_fails_like( [ 'pg_ctl', '-D', "$tempdir/nonexistent", 'promote' ], qr/directory .* does not exist/, - 'pg_ctl promote with nonexistent directory'); + 'pg_ctl promote with nonexistent directory' +); my $node_primary = get_new_node('primary'); $node_primary->init(allows_streaming => 1); @@ -18,14 +19,16 @@ $node_primary->init(allows_streaming => 1); command_fails_like( [ 'pg_ctl', '-D', $node_primary->data_dir, 'promote' ], qr/PID file .* does not exist/, - 'pg_ctl promote of not running instance fails'); + 'pg_ctl promote of not running instance fails' +); $node_primary->start; command_fails_like( [ 'pg_ctl', '-D', $node_primary->data_dir, 'promote' ], qr/not in standby mode/, - 'pg_ctl promote of primary instance fails'); + 'pg_ctl promote of primary instance fails' +); my $node_standby = get_new_node('standby'); $node_primary->backup('my_backup'); @@ -39,9 +42,12 @@ is($node_standby->safe_psql('postgres', 'SELECT pg_is_in_recovery()'), command_ok([ 'pg_ctl', '-D', $node_standby->data_dir, '-W', 'promote' ], 'pg_ctl -W promote of standby runs'); -ok( $node_standby->poll_query_until( - 'postgres', 'SELECT NOT pg_is_in_recovery()'), - 'promoted standby is not in recovery'); +ok( + $node_standby->poll_query_until( + 'postgres', 'SELECT NOT pg_is_in_recovery()' + ), + 'promoted standby is not in recovery' +); # same again with default wait option $node_standby = get_new_node('standby2'); diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl index 8be5770..6c200aa 100644 --- a/src/bin/pg_dump/t/001_basic.pl +++ b/src/bin/pg_dump/t/001_basic.pl @@ -31,17 +31,20 @@ program_options_handling_ok('pg_dumpall'); command_fails_like( [ 'pg_dump', 'qqq', 'abc' ], qr/\Qpg_dump: too many command-line arguments (first is "abc")\E/, - 'pg_dump: too many command-line arguments (first is "asd")'); + 'pg_dump: too many command-line arguments (first is "asd")' +); command_fails_like( [ 'pg_restore', 'qqq', 'abc' ], qr/\Qpg_restore: too many command-line arguments (first is "abc")\E/, - 'pg_restore too many command-line arguments (first is "abc")'); + 'pg_restore too many command-line arguments (first is "abc")' +); command_fails_like( [ 'pg_dumpall', 'qqq', 'abc' ], qr/\Qpg_dumpall: too many command-line arguments (first is "qqq")\E/, - 'pg_dumpall: too many command-line arguments (first is "qqq")'); + 'pg_dumpall: too many command-line arguments (first is "qqq")' +); command_fails_like( [ 'pg_dump', '-s', '-a' ], @@ -58,12 +61,14 @@ command_fails_like( command_fails_like( [ 'pg_restore', '-d', 'xxx', '-f', 'xxx' ], qr/\Qpg_restore: options -d\/--dbname and -f\/--file cannot be used together\E/, - 'pg_restore: options -d/--dbname and -f/--file cannot be used together'); + 'pg_restore: options -d/--dbname and -f/--file cannot be used together' +); command_fails_like( [ 'pg_dump', '-c', '-a' ], qr/\Qpg_dump: options -c\/--clean and -a\/--data-only cannot be used together\E/, - 'pg_dump: options -c/--clean and -a/--data-only cannot be used together'); + 'pg_dump: options -c/--clean and -a/--data-only cannot be used together' +); command_fails_like( [ 'pg_restore', '-c', '-a' ], @@ -80,47 +85,56 @@ command_fails_like( command_fails_like( [ 'pg_dump', '--if-exists' ], qr/\Qpg_dump: option --if-exists requires option -c\/--clean\E/, - 'pg_dump: option --if-exists requires option -c/--clean'); + 'pg_dump: option --if-exists requires option -c/--clean' +); command_fails_like( [ 'pg_dump', '-j3' ], qr/\Qpg_dump: parallel backup only supported by the directory format\E/, - 'pg_dump: parallel backup only supported by the directory format'); + 'pg_dump: parallel backup only supported by the directory format' +); command_fails_like( [ 'pg_dump', '-j', '-1' ], qr/\Qpg_dump: invalid number of parallel jobs\E/, - 'pg_dump: invalid number of parallel jobs'); + 'pg_dump: invalid number of parallel jobs' +); command_fails_like( [ 'pg_dump', '-F', 'garbage' ], qr/\Qpg_dump: invalid output format\E/, - 'pg_dump: invalid output format'); + 'pg_dump: invalid output format' +); command_fails_like( [ 'pg_restore', '-j', '-1' ], qr/\Qpg_restore: invalid number of parallel jobs\E/, - 'pg_restore: invalid number of parallel jobs'); + 'pg_restore: invalid number of parallel jobs' +); command_fails_like( [ 'pg_restore', '--single-transaction', '-j3' ], qr/\Qpg_restore: cannot specify both --single-transaction and multiple jobs\E/, - 'pg_restore: cannot specify both --single-transaction and multiple jobs'); + 'pg_restore: cannot specify both --single-transaction and multiple jobs' +); command_fails_like( [ 'pg_dump', '-Z', '-1' ], qr/\Qpg_dump: compression level must be in range 0..9\E/, - 'pg_dump: compression level must be in range 0..9'); + 'pg_dump: compression level must be in range 0..9' +); command_fails_like( [ 'pg_restore', '--if-exists' ], qr/\Qpg_restore: option --if-exists requires option -c\/--clean\E/, - 'pg_restore: option --if-exists requires option -c/--clean'); + 'pg_restore: option --if-exists requires option -c/--clean' +); command_fails_like( [ 'pg_restore', '-F', 'garbage' ], qr/\Qpg_restore: unrecognized archive format "garbage";\E/, - 'pg_dump: unrecognized archive format'); + 'pg_dump: unrecognized archive format' +); # pg_dumpall command-line argument checks command_fails_like( @@ -144,4 +158,5 @@ command_fails_like( command_fails_like( [ 'pg_dumpall', '--if-exists' ], qr/\Qpg_dumpall: option --if-exists requires option -c\/--clean\E/, - 'pg_dumpall: option --if-exists requires option -c/--clean'); + 'pg_dumpall: option --if-exists requires option -c/--clean' +); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 81cd65e..487c863 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -50,7 +50,9 @@ my %pgdump_runs = ( restore_cmd => [ 'pg_restore', '-Fc', '--verbose', "--file=$tempdir/binary_upgrade.sql", - "$tempdir/binary_upgrade.dump", ], }, + "$tempdir/binary_upgrade.dump", + ], + }, clean => { dump_cmd => [ 'pg_dump', @@ -58,7 +60,8 @@ my %pgdump_runs = ( "--file=$tempdir/clean.sql", '-c', '-d', 'postgres', # alternative way to specify database - ], }, + ], + }, clean_if_exists => { dump_cmd => [ 'pg_dump', @@ -67,12 +70,16 @@ my %pgdump_runs = ( '-c', '--if-exists', '--encoding=UTF8', # no-op, just tests that option is accepted - 'postgres', ], }, + 'postgres', + ], + }, column_inserts => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/column_inserts.sql", '-a', - '--column-inserts', 'postgres', ], }, + '--column-inserts', 'postgres', + ], + }, createdb => { dump_cmd => [ 'pg_dump', @@ -81,7 +88,9 @@ my %pgdump_runs = ( '-C', '-R', # no-op, just for testing '-v', - 'postgres', ], }, + 'postgres', + ], + }, data_only => { dump_cmd => [ 'pg_dump', @@ -91,78 +100,102 @@ my %pgdump_runs = ( '--superuser=test_superuser', '--disable-triggers', '-v', # no-op, just make sure it works - 'postgres', ], }, + 'postgres', + ], + }, defaults => { dump_cmd => [ 'pg_dump', '--no-sync', '-f', "$tempdir/defaults.sql", - 'postgres', ], }, + 'postgres', + ], + }, defaults_no_public => { database => 'regress_pg_dump_test', dump_cmd => [ 'pg_dump', '--no-sync', '-f', "$tempdir/defaults_no_public.sql", - 'regress_pg_dump_test', ], }, + 'regress_pg_dump_test', + ], + }, defaults_no_public_clean => { database => 'regress_pg_dump_test', dump_cmd => [ 'pg_dump', '--no-sync', '-c', '-f', "$tempdir/defaults_no_public_clean.sql", - 'regress_pg_dump_test', ], }, + 'regress_pg_dump_test', + ], + }, # Do not use --no-sync to give test coverage for data sync. defaults_custom_format => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '-Fc', '-Z6', - "--file=$tempdir/defaults_custom_format.dump", 'postgres', ], + "--file=$tempdir/defaults_custom_format.dump", 'postgres', + ], restore_cmd => [ 'pg_restore', '-Fc', "--file=$tempdir/defaults_custom_format.sql", - "$tempdir/defaults_custom_format.dump", ], }, + "$tempdir/defaults_custom_format.dump", + ], + }, # Do not use --no-sync to give test coverage for data sync. defaults_dir_format => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '-Fd', - "--file=$tempdir/defaults_dir_format", 'postgres', ], + "--file=$tempdir/defaults_dir_format", 'postgres', + ], restore_cmd => [ 'pg_restore', '-Fd', "--file=$tempdir/defaults_dir_format.sql", - "$tempdir/defaults_dir_format", ], }, + "$tempdir/defaults_dir_format", + ], + }, # Do not use --no-sync to give test coverage for data sync. defaults_parallel => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '-Fd', '-j2', "--file=$tempdir/defaults_parallel", - 'postgres', ], + 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/defaults_parallel.sql", - "$tempdir/defaults_parallel", ], }, + "$tempdir/defaults_parallel", + ], + }, # Do not use --no-sync to give test coverage for data sync. defaults_tar_format => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '-Ft', - "--file=$tempdir/defaults_tar_format.tar", 'postgres', ], + "--file=$tempdir/defaults_tar_format.tar", 'postgres', + ], restore_cmd => [ 'pg_restore', '--format=tar', "--file=$tempdir/defaults_tar_format.sql", - "$tempdir/defaults_tar_format.tar", ], }, + "$tempdir/defaults_tar_format.tar", + ], + }, exclude_dump_test_schema => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/exclude_dump_test_schema.sql", - '--exclude-schema=dump_test', 'postgres', ], }, + '--exclude-schema=dump_test', 'postgres', + ], + }, exclude_test_table => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/exclude_test_table.sql", - '--exclude-table=dump_test.test_table', 'postgres', ], }, + '--exclude-table=dump_test.test_table', 'postgres', + ], + }, exclude_test_table_data => { dump_cmd => [ 'pg_dump', @@ -170,39 +203,55 @@ my %pgdump_runs = ( "--file=$tempdir/exclude_test_table_data.sql", '--exclude-table-data=dump_test.test_table', '--no-unlogged-table-data', - 'postgres', ], }, + 'postgres', + ], + }, pg_dumpall_globals => { dump_cmd => [ 'pg_dumpall', '-v', "--file=$tempdir/pg_dumpall_globals.sql", - '-g', '--no-sync', ], }, + '-g', '--no-sync', + ], + }, pg_dumpall_globals_clean => { dump_cmd => [ 'pg_dumpall', "--file=$tempdir/pg_dumpall_globals_clean.sql", - '-g', '-c', '--no-sync', ], }, + '-g', '-c', '--no-sync', + ], + }, pg_dumpall_dbprivs => { dump_cmd => [ 'pg_dumpall', '--no-sync', - "--file=$tempdir/pg_dumpall_dbprivs.sql", ], }, + "--file=$tempdir/pg_dumpall_dbprivs.sql", + ], + }, no_blobs => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/no_blobs.sql", '-B', - 'postgres', ], }, + 'postgres', + ], + }, no_privs => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/no_privs.sql", '-x', - 'postgres', ], }, + 'postgres', + ], + }, no_owner => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/no_owner.sql", '-O', - 'postgres', ], }, + 'postgres', + ], + }, only_dump_test_schema => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/only_dump_test_schema.sql", - '--schema=dump_test', 'postgres', ], }, + '--schema=dump_test', 'postgres', + ], + }, only_dump_test_table => { dump_cmd => [ 'pg_dump', @@ -210,7 +259,9 @@ my %pgdump_runs = ( "--file=$tempdir/only_dump_test_table.sql", '--table=dump_test.test_table', '--lock-wait-timeout=1000000', - 'postgres', ], }, + 'postgres', + ], + }, role => { dump_cmd => [ 'pg_dump', @@ -218,7 +269,9 @@ my %pgdump_runs = ( "--file=$tempdir/role.sql", '--role=regress_dump_test_role', '--schema=dump_test_second_schema', - 'postgres', ], }, + 'postgres', + ], + }, role_parallel => { test_key => 'role', dump_cmd => [ @@ -229,39 +282,55 @@ my %pgdump_runs = ( "--file=$tempdir/role_parallel", '--role=regress_dump_test_role', '--schema=dump_test_second_schema', - 'postgres', ], + 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/role_parallel.sql", - "$tempdir/role_parallel", ], }, + "$tempdir/role_parallel", + ], + }, schema_only => { dump_cmd => [ 'pg_dump', '--format=plain', "--file=$tempdir/schema_only.sql", '--no-sync', - '-s', 'postgres', ], }, + '-s', 'postgres', + ], + }, section_pre_data => { dump_cmd => [ 'pg_dump', "--file=$tempdir/section_pre_data.sql", '--section=pre-data', '--no-sync', - 'postgres', ], }, + 'postgres', + ], + }, section_data => { dump_cmd => [ 'pg_dump', "--file=$tempdir/section_data.sql", '--section=data', '--no-sync', - 'postgres', ], }, + 'postgres', + ], + }, section_post_data => { dump_cmd => [ 'pg_dump', "--file=$tempdir/section_post_data.sql", - '--section=post-data', '--no-sync', 'postgres', ], }, + '--section=post-data', '--no-sync', 'postgres', + ], + }, test_schema_plus_blobs => { dump_cmd => [ 'pg_dump', "--file=$tempdir/test_schema_plus_blobs.sql", - '--schema=dump_test', '-b', '-B', '--no-sync', 'postgres', ], }, + '--schema=dump_test', '-b', '-B', '--no-sync', 'postgres', + ], + }, with_oids => { dump_cmd => [ 'pg_dump', '--oids', '--no-sync', "--file=$tempdir/with_oids.sql", - 'postgres', ], },); + 'postgres', + ], + }, +); ############################################################### # Definition of the tests to run. @@ -302,7 +371,8 @@ my %pgdump_runs = ( # Tests which target the 'dump_test' schema, specifically. my %dump_test_schema_runs = ( only_dump_test_schema => 1, - test_schema_plus_blobs => 1,); + test_schema_plus_blobs => 1, +); # Tests which are considered 'full' dumps by pg_dump, but there # are flags used to exclude specific items (ACLs, blobs, etc). @@ -320,7 +390,8 @@ my %full_runs = ( no_privs => 1, pg_dumpall_dbprivs => 1, schema_only => 1, - with_oids => 1,); + with_oids => 1, +); # This is where the actual tests are defined. my %tests = ( @@ -338,7 +409,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_post_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'ALTER DEFAULT PRIVILEGES FOR ROLE regress_dump_test_role REVOKE' => { create_order => 55, @@ -351,7 +424,8 @@ my %tests = ( \QREVOKE ALL ON FUNCTIONS FROM PUBLIC;\E /xm, like => { %full_runs, section_post_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'ALTER DEFAULT PRIVILEGES FOR ROLE regress_dump_test_role REVOKE SELECT' => { @@ -368,7 +442,8 @@ my %tests = ( \QGRANT INSERT,REFERENCES,DELETE,TRIGGER,TRUNCATE,UPDATE ON TABLES TO regress_dump_test_role;\E /xm, like => { %full_runs, section_post_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'ALTER ROLE regress_dump_test_role' => { regexp => qr/^ @@ -379,23 +454,28 @@ my %tests = ( like => { pg_dumpall_dbprivs => 1, pg_dumpall_globals => 1, - pg_dumpall_globals_clean => 1, }, }, + pg_dumpall_globals_clean => 1, + }, + }, 'ALTER COLLATION test0 OWNER TO' => { regexp => qr/^ALTER COLLATION public.test0 OWNER TO .*;/m, collation => 1, like => { %full_runs, section_pre_data => 1, }, - unlike => { %dump_test_schema_runs, no_owner => 1, }, }, + unlike => { %dump_test_schema_runs, no_owner => 1, }, + }, 'ALTER FOREIGN DATA WRAPPER dummy OWNER TO' => { regexp => qr/^ALTER FOREIGN DATA WRAPPER dummy OWNER TO .*;/m, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + unlike => { no_owner => 1, }, + }, 'ALTER SERVER s1 OWNER TO' => { regexp => qr/^ALTER SERVER s1 OWNER TO .*;/m, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + unlike => { no_owner => 1, }, + }, 'ALTER FUNCTION dump_test.pltestlang_call_handler() OWNER TO' => { regexp => qr/^ @@ -406,7 +486,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER OPERATOR FAMILY dump_test.op_family OWNER TO' => { regexp => qr/^ @@ -417,7 +499,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER OPERATOR FAMILY dump_test.op_family USING btree' => { create_order => 75, @@ -442,7 +526,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'ALTER OPERATOR CLASS dump_test.op_class OWNER TO' => { regexp => qr/^ @@ -453,12 +538,15 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER PUBLICATION pub1 OWNER TO' => { regexp => qr/^ALTER PUBLICATION pub1 OWNER TO .*;/m, like => { %full_runs, section_post_data => 1, }, - unlike => { no_owner => 1, }, }, + unlike => { no_owner => 1, }, + }, 'ALTER LARGE OBJECT ... OWNER TO' => { regexp => qr/^ALTER LARGE OBJECT \d+ OWNER TO .*;/m, @@ -467,16 +555,20 @@ my %tests = ( column_inserts => 1, data_only => 1, section_pre_data => 1, - test_schema_plus_blobs => 1, }, + test_schema_plus_blobs => 1, + }, unlike => { no_blobs => 1, no_owner => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO' => { regexp => qr/^ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO .*;/m, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + unlike => { no_owner => 1, }, + }, 'ALTER SCHEMA dump_test OWNER TO' => { regexp => qr/^ALTER SCHEMA dump_test OWNER TO .*;/m, @@ -484,15 +576,19 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER SCHEMA dump_test_second_schema OWNER TO' => { regexp => qr/^ALTER SCHEMA dump_test_second_schema OWNER TO .*;/m, like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_owner => 1, }, + }, 'ALTER SEQUENCE test_table_col1_seq' => { regexp => qr/^ @@ -502,10 +598,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER SEQUENCE test_third_table_col1_seq' => { regexp => qr/^ @@ -514,7 +613,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, }, + section_pre_data => 1, + }, + }, 'ALTER TABLE ONLY test_table ADD CONSTRAINT ... PRIMARY KEY' => { regexp => qr/^ @@ -525,10 +626,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE ONLY test_table ALTER COLUMN col1 SET STATISTICS 90' => { create_order => 93, @@ -541,10 +645,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE ONLY test_table ALTER COLUMN col2 SET STORAGE' => { create_order => 94, @@ -557,10 +664,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE ONLY test_table ALTER COLUMN col3 SET STORAGE' => { create_order => 95, @@ -573,10 +683,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE ONLY test_table ALTER COLUMN col4 SET n_distinct' => { create_order => 95, @@ -589,10 +702,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE ONLY dump_test.measurement ATTACH PARTITION measurement_y2006m2' => { @@ -600,7 +716,8 @@ my %tests = ( \QALTER TABLE ONLY dump_test.measurement ATTACH PARTITION dump_test_second_schema.measurement_y2006m2 \E \QFOR VALUES FROM ('2006-02-01') TO ('2006-03-01');\E\n /xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'ALTER TABLE test_table CLUSTER ON test_table_pkey' => { create_order => 96, @@ -613,10 +730,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE test_table DISABLE TRIGGER ALL' => { regexp => qr/^ @@ -625,7 +745,8 @@ my %tests = ( \QCOPY dump_test.test_table (col1, col2, col3, col4) FROM stdin;\E \n(?:\d\t\\N\t\\N\t\\N\n){9}\\\.\n\n\n \QALTER TABLE dump_test.test_table ENABLE TRIGGER ALL;\E/xm, - like => { data_only => 1, }, }, + like => { data_only => 1, }, + }, 'ALTER FOREIGN TABLE foreign_table ALTER COLUMN c1 OPTIONS' => { regexp => qr/^ @@ -635,7 +756,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'ALTER TABLE test_table OWNER TO' => { regexp => qr/^ALTER TABLE dump_test.test_table OWNER TO .*;/m, @@ -643,11 +765,14 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, exclude_test_table => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER TABLE test_table ENABLE ROW LEVEL SECURITY' => { create_order => 23, @@ -659,10 +784,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER TABLE test_second_table OWNER TO' => { regexp => qr/^ALTER TABLE dump_test.test_second_table OWNER TO .*;/m, @@ -670,7 +798,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER TABLE test_third_table OWNER TO' => { regexp => @@ -678,8 +808,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_owner => 1, }, + }, 'ALTER TABLE measurement OWNER TO' => { regexp => qr/^ALTER TABLE dump_test.measurement OWNER TO .*;/m, @@ -687,7 +819,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER TABLE measurement_y2006m2 OWNER TO' => { regexp => @@ -695,8 +829,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_owner => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_owner => 1, }, + }, 'ALTER FOREIGN TABLE foreign_table OWNER TO' => { regexp => @@ -705,7 +841,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 OWNER TO' => { regexp => @@ -714,7 +852,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_owner => 1, }, }, + no_owner => 1, + }, + }, 'ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 OWNER TO' => { regexp => @@ -725,7 +865,9 @@ my %tests = ( exclude_dump_test_schema => 1, only_dump_test_table => 1, no_owner => 1, - role => 1, }, }, + role => 1, + }, + }, 'BLOB create (using lo_from_bytea)' => { create_order => 50, @@ -737,10 +879,13 @@ my %tests = ( column_inserts => 1, data_only => 1, section_pre_data => 1, - test_schema_plus_blobs => 1, }, + test_schema_plus_blobs => 1, + }, unlike => { schema_only => 1, - no_blobs => 1, }, }, + no_blobs => 1, + }, + }, 'BLOB load (using lo_from_bytea)' => { regexp => qr/^ @@ -754,23 +899,28 @@ my %tests = ( column_inserts => 1, data_only => 1, section_data => 1, - test_schema_plus_blobs => 1, }, + test_schema_plus_blobs => 1, + }, unlike => { binary_upgrade => 1, no_blobs => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COMMENT ON DATABASE postgres' => { regexp => qr/^COMMENT ON DATABASE postgres IS .*;/m, # Should appear in the same tests as "CREATE DATABASE postgres" - like => { createdb => 1, }, }, + like => { createdb => 1, }, + }, 'COMMENT ON EXTENSION plpgsql' => { regexp => qr/^COMMENT ON EXTENSION plpgsql IS .*;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'COMMENT ON TABLE dump_test.test_table' => { create_order => 36, @@ -782,10 +932,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'COMMENT ON COLUMN dump_test.test_table.col1' => { create_order => 36, @@ -798,10 +951,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'COMMENT ON COLUMN dump_test.composite.f1' => { create_order => 44, @@ -812,7 +968,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON COLUMN dump_test.test_second_table.col1' => { create_order => 63, @@ -823,7 +980,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON COLUMN dump_test.test_second_table.col2' => { create_order => 64, @@ -834,7 +992,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON CONVERSION dump_test.test_conversion' => { create_order => 79, @@ -844,7 +1003,8 @@ my %tests = ( qr/^COMMENT ON CONVERSION dump_test.test_conversion IS 'comment on test conversion';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON COLLATION test0' => { create_order => 77, @@ -853,7 +1013,8 @@ my %tests = ( regexp => qr/^COMMENT ON COLLATION public.test0 IS 'comment on test0 collation';/m, collation => 1, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'COMMENT ON LARGE OBJECT ...' => { create_order => 65, @@ -872,10 +1033,13 @@ my %tests = ( column_inserts => 1, data_only => 1, section_pre_data => 1, - test_schema_plus_blobs => 1, }, + test_schema_plus_blobs => 1, + }, unlike => { no_blobs => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COMMENT ON PUBLICATION pub1' => { create_order => 55, @@ -883,7 +1047,8 @@ my %tests = ( IS \'comment on publication\';', regexp => qr/^COMMENT ON PUBLICATION pub1 IS 'comment on publication';/m, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'COMMENT ON SUBSCRIPTION sub1' => { create_order => 55, @@ -891,7 +1056,8 @@ my %tests = ( IS \'comment on subscription\';', regexp => qr/^COMMENT ON SUBSCRIPTION sub1 IS 'comment on subscription';/m, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'COMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => { create_order => 84, @@ -902,7 +1068,8 @@ my %tests = ( qr/^COMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1 IS 'comment on text search configuration';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1' => { create_order => 84, @@ -913,7 +1080,8 @@ my %tests = ( qr/^COMMENT ON TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1 IS 'comment on text search dictionary';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TEXT SEARCH PARSER dump_test.alt_ts_prs1' => { create_order => 84, @@ -923,7 +1091,8 @@ my %tests = ( qr/^COMMENT ON TEXT SEARCH PARSER dump_test.alt_ts_prs1 IS 'comment on text search parser';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1' => { create_order => 84, @@ -933,7 +1102,8 @@ my %tests = ( qr/^COMMENT ON TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1 IS 'comment on text search template';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TYPE dump_test.planets - ENUM' => { create_order => 68, @@ -943,7 +1113,8 @@ my %tests = ( qr/^COMMENT ON TYPE dump_test.planets IS 'comment on enum type';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TYPE dump_test.textrange - RANGE' => { create_order => 69, @@ -953,7 +1124,8 @@ my %tests = ( qr/^COMMENT ON TYPE dump_test.textrange IS 'comment on range type';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TYPE dump_test.int42 - Regular' => { create_order => 70, @@ -963,7 +1135,8 @@ my %tests = ( qr/^COMMENT ON TYPE dump_test.int42 IS 'comment on regular type';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COMMENT ON TYPE dump_test.undefined - Undefined' => { create_order => 71, @@ -973,7 +1146,8 @@ my %tests = ( qr/^COMMENT ON TYPE dump_test.undefined IS 'comment on undefined type';/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'COPY test_table' => { create_order => 4, @@ -988,13 +1162,16 @@ my %tests = ( %dump_test_schema_runs, data_only => 1, only_dump_test_table => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, exclude_test_table => 1, exclude_test_table_data => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COPY fk_reference_test_table' => { create_order => 22, @@ -1010,11 +1187,14 @@ my %tests = ( data_only => 1, exclude_test_table => 1, exclude_test_table_data => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, # In a data-only dump, we try to actually order according to FKs, # so this check is just making sure that the referring table comes after @@ -1026,7 +1206,8 @@ my %tests = ( \QCOPY dump_test.fk_reference_test_table (col1) FROM stdin;\E \n(?:\d\n){5}\\\.\n /xms, - like => { data_only => 1, }, }, + like => { data_only => 1, }, + }, 'COPY test_second_table' => { create_order => 7, @@ -1041,11 +1222,14 @@ my %tests = ( %full_runs, %dump_test_schema_runs, data_only => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COPY test_third_table' => { create_order => 12, @@ -1060,19 +1244,23 @@ my %tests = ( %full_runs, data_only => 1, role => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_test_table_data => 1, schema_only => 1, - with_oids => 1, }, }, + with_oids => 1, + }, + }, 'COPY test_third_table WITH OIDS' => { regexp => qr/^ \QCOPY dump_test_second_schema.test_third_table (col1) WITH OIDS FROM stdin;\E \n(?:\d+\t\d\n){9}\\\.\n /xm, - like => { with_oids => 1, }, }, + like => { with_oids => 1, }, + }, 'COPY test_fourth_table' => { create_order => 7, @@ -1086,11 +1274,14 @@ my %tests = ( %full_runs, %dump_test_schema_runs, data_only => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COPY test_fifth_table' => { create_order => 54, @@ -1104,11 +1295,14 @@ my %tests = ( %full_runs, %dump_test_schema_runs, data_only => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'COPY test_table_identity' => { create_order => 54, @@ -1122,44 +1316,53 @@ my %tests = ( %full_runs, %dump_test_schema_runs, data_only => 1, - section_data => 1, }, + section_data => 1, + }, unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'INSERT INTO test_table' => { regexp => qr/^ (?:INSERT\ INTO\ dump_test.test_table\ \(col1,\ col2,\ col3,\ col4\)\ VALUES\ \(\d,\ NULL,\ NULL,\ NULL\);\n){9} /xm, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'INSERT INTO test_second_table' => { regexp => qr/^ (?:INSERT\ INTO\ dump_test.test_second_table\ \(col1,\ col2\) \ VALUES\ \(\d,\ '\d'\);\n){9}/xm, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'INSERT INTO test_third_table' => { regexp => qr/^ (?:INSERT\ INTO\ dump_test_second_schema.test_third_table\ \(col1\) \ VALUES\ \(\d\);\n){9}/xm, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'INSERT INTO test_fourth_table' => { regexp => qr/^\QINSERT INTO dump_test.test_fourth_table DEFAULT VALUES;\E/m, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'INSERT INTO test_fifth_table' => { regexp => qr/^\QINSERT INTO dump_test.test_fifth_table (col1, col2, col3, col4, col5) VALUES (NULL, true, false, B'11001', 'NaN');\E/m, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'INSERT INTO test_table_identity' => { regexp => qr/^\QINSERT INTO dump_test.test_table_identity (col1, col2) OVERRIDING SYSTEM VALUE VALUES (1, 'test');\E/m, - like => { column_inserts => 1, }, }, + like => { column_inserts => 1, }, + }, 'CREATE ROLE regress_dump_test_role' => { create_order => 1, @@ -1168,7 +1371,9 @@ my %tests = ( like => { pg_dumpall_dbprivs => 1, pg_dumpall_globals => 1, - pg_dumpall_globals_clean => 1, }, }, + pg_dumpall_globals_clean => 1, + }, + }, 'CREATE ACCESS METHOD gist2' => { create_order => 52, @@ -1176,7 +1381,8 @@ my %tests = ( 'CREATE ACCESS METHOD gist2 TYPE INDEX HANDLER gisthandler;', regexp => qr/CREATE ACCESS METHOD gist2 TYPE INDEX HANDLER gisthandler;/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE COLLATION test0 FROM "C"' => { create_order => 76, @@ -1184,7 +1390,8 @@ my %tests = ( regexp => qr/^ \QCREATE COLLATION public.test0 (provider = libc, locale = 'C');\E/xm, collation => 1, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE CAST FOR timestamptz' => { create_order => 51, @@ -1192,13 +1399,15 @@ my %tests = ( 'CREATE CAST (timestamptz AS interval) WITH FUNCTION age(timestamptz) AS ASSIGNMENT;', regexp => qr/CREATE CAST \(timestamp with time zone AS interval\) WITH FUNCTION pg_catalog\.age\(timestamp with time zone\) AS ASSIGNMENT;/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE DATABASE postgres' => { regexp => qr/^ \QCREATE DATABASE postgres WITH TEMPLATE = template0 \E .*;/xm, - like => { createdb => 1, }, }, + like => { createdb => 1, }, + }, 'CREATE DATABASE dump_test' => { create_order => 47, @@ -1206,7 +1415,8 @@ my %tests = ( regexp => qr/^ \QCREATE DATABASE dump_test WITH TEMPLATE = template0 \E .*;/xm, - like => { pg_dumpall_dbprivs => 1, }, }, + like => { pg_dumpall_dbprivs => 1, }, + }, 'CREATE EXTENSION ... plpgsql' => { regexp => qr/^ @@ -1214,7 +1424,8 @@ my %tests = ( /xm, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'CREATE AGGREGATE dump_test.newavg' => { create_order => 25, @@ -1238,8 +1449,10 @@ my %tests = ( %full_runs, %dump_test_schema_runs, exclude_test_table => 1, - section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + section_pre_data => 1, + }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE CONVERSION dump_test.test_conversion' => { create_order => 78, @@ -1249,7 +1462,8 @@ my %tests = ( qr/^\QCREATE DEFAULT CONVERSION dump_test.test_conversion FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8;\E/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE DOMAIN dump_test.us_postal_code' => { create_order => 29, @@ -1267,7 +1481,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FUNCTION dump_test.pltestlang_call_handler' => { create_order => 17, @@ -1283,7 +1498,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FUNCTION dump_test.trigger_func' => { create_order => 30, @@ -1298,7 +1514,8 @@ my %tests = ( \$\$;/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FUNCTION dump_test.event_trigger_func' => { create_order => 32, @@ -1313,7 +1530,8 @@ my %tests = ( \$\$;/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE OPERATOR FAMILY dump_test.op_family' => { create_order => 73, @@ -1324,7 +1542,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE OPERATOR CLASS dump_test.op_class' => { create_order => 74, @@ -1351,7 +1570,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE EVENT TRIGGER test_event_trigger' => { create_order => 33, @@ -1363,7 +1583,8 @@ my %tests = ( \QON ddl_command_start\E \n\s+\QEXECUTE PROCEDURE dump_test.event_trigger_func();\E /xm, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'CREATE TRIGGER test_trigger' => { create_order => 31, @@ -1380,10 +1601,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_test_table => 1, - exclude_dump_test_schema => 1, }, }, + exclude_dump_test_schema => 1, + }, + }, 'CREATE TYPE dump_test.planets AS ENUM' => { create_order => 37, @@ -1399,7 +1623,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { binary_upgrade => 1, - exclude_dump_test_schema => 1, }, }, + exclude_dump_test_schema => 1, + }, + }, 'CREATE TYPE dump_test.planets AS ENUM pg_upgrade' => { regexp => qr/^ @@ -1411,7 +1637,8 @@ my %tests = ( \n.*^ \QALTER TYPE dump_test.planets ADD VALUE 'mars';\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE TYPE dump_test.textrange AS RANGE' => { create_order => 38, @@ -1424,7 +1651,8 @@ my %tests = ( \n\);/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TYPE dump_test.int42' => { create_order => 39, @@ -1432,7 +1660,8 @@ my %tests = ( regexp => qr/^CREATE TYPE dump_test.int42;/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => { create_order => 80, @@ -1443,7 +1672,8 @@ my %tests = ( \s+\QPARSER = pg_catalog."default" );\E/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'ALTER TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1 ...' => { regexp => qr/^ @@ -1507,7 +1737,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TEXT SEARCH TEMPLATE dump_test.alt_ts_temp1' => { create_order => 81, @@ -1518,7 +1749,8 @@ my %tests = ( \s+\QLEXIZE = dsimple_lexize );\E/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TEXT SEARCH PARSER dump_test.alt_ts_prs1' => { create_order => 82, @@ -1533,7 +1765,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TEXT SEARCH DICTIONARY dump_test.alt_ts_dict1' => { create_order => 83, @@ -1545,7 +1778,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FUNCTION dump_test.int42_in' => { create_order => 40, @@ -1559,7 +1793,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FUNCTION dump_test.int42_out' => { create_order => 41, @@ -1573,7 +1808,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE PROCEDURE dump_test.ptest1' => { create_order => 41, @@ -1586,7 +1822,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TYPE dump_test.int42 populated' => { create_order => 42, @@ -1609,7 +1846,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TYPE dump_test.composite' => { create_order => 43, @@ -1625,7 +1863,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TYPE dump_test.undefined' => { create_order => 39, @@ -1633,19 +1872,22 @@ my %tests = ( regexp => qr/^CREATE TYPE dump_test.undefined;/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE FOREIGN DATA WRAPPER dummy' => { create_order => 35, create_sql => 'CREATE FOREIGN DATA WRAPPER dummy;', regexp => qr/CREATE FOREIGN DATA WRAPPER dummy;/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE SERVER s1 FOREIGN DATA WRAPPER dummy' => { create_order => 36, create_sql => 'CREATE SERVER s1 FOREIGN DATA WRAPPER dummy;', regexp => qr/CREATE SERVER s1 FOREIGN DATA WRAPPER dummy;/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE FOREIGN TABLE dump_test.foreign_table SERVER s1' => { create_order => 88, @@ -1663,7 +1905,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE USER MAPPING FOR regress_dump_test_role SERVER s1' => { create_order => 86, @@ -1671,7 +1914,8 @@ my %tests = ( 'CREATE USER MAPPING FOR regress_dump_test_role SERVER s1;', regexp => qr/CREATE USER MAPPING FOR regress_dump_test_role SERVER s1;/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE TRANSFORM FOR int' => { create_order => 34, @@ -1679,7 +1923,8 @@ my %tests = ( 'CREATE TRANSFORM FOR int LANGUAGE SQL (FROM SQL WITH FUNCTION varchar_transform(internal), TO SQL WITH FUNCTION int4recv(internal));', regexp => qr/CREATE TRANSFORM FOR integer LANGUAGE sql \(FROM SQL WITH FUNCTION pg_catalog\.varchar_transform\(internal\), TO SQL WITH FUNCTION pg_catalog\.int4recv\(internal\)\);/m, - like => { %full_runs, section_pre_data => 1, }, }, + like => { %full_runs, section_pre_data => 1, }, + }, 'CREATE LANGUAGE pltestlang' => { create_order => 18, @@ -1690,7 +1935,8 @@ my %tests = ( \QHANDLER dump_test.pltestlang_call_handler;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE MATERIALIZED VIEW matview' => { create_order => 20, @@ -1704,7 +1950,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE MATERIALIZED VIEW matview_second' => { create_order => 21, @@ -1719,7 +1966,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE MATERIALIZED VIEW matview_third' => { create_order => 58, @@ -1734,7 +1982,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE MATERIALIZED VIEW matview_fourth' => { create_order => 59, @@ -1749,7 +1998,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE POLICY p1 ON test_table' => { create_order => 22, @@ -1764,10 +2014,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE POLICY p2 ON test_table FOR SELECT' => { create_order => 24, @@ -1781,10 +2034,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE POLICY p3 ON test_table FOR INSERT' => { create_order => 25, @@ -1798,10 +2054,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE POLICY p4 ON test_table FOR UPDATE' => { create_order => 26, @@ -1815,10 +2074,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE POLICY p5 ON test_table FOR DELETE' => { create_order => 27, @@ -1832,10 +2094,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE POLICY p6 ON test_table AS RESTRICTIVE' => { create_order => 27, @@ -1849,10 +2114,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_post_data => 1, }, + section_post_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE PUBLICATION pub1' => { create_order => 50, @@ -1860,7 +2128,8 @@ my %tests = ( regexp => qr/^ \QCREATE PUBLICATION pub1 WITH (publish = 'insert, update, delete, truncate');\E /xm, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'CREATE PUBLICATION pub2' => { create_order => 50, @@ -1870,7 +2139,8 @@ my %tests = ( regexp => qr/^ \QCREATE PUBLICATION pub2 FOR ALL TABLES WITH (publish = '');\E /xm, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'CREATE SUBSCRIPTION sub1' => { create_order => 50, @@ -1880,7 +2150,8 @@ my %tests = ( regexp => qr/^ \QCREATE SUBSCRIPTION sub1 CONNECTION 'dbname=doesnotexist' PUBLICATION pub1 WITH (connect = false, slot_name = 'sub1');\E /xm, - like => { %full_runs, section_post_data => 1, }, }, + like => { %full_runs, section_post_data => 1, }, + }, 'ALTER PUBLICATION pub1 ADD TABLE test_table' => { create_order => 51, @@ -1892,7 +2163,9 @@ my %tests = ( like => { %full_runs, section_post_data => 1, }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'ALTER PUBLICATION pub1 ADD TABLE test_second_table' => { create_order => 52, @@ -1902,13 +2175,15 @@ my %tests = ( \QALTER PUBLICATION pub1 ADD TABLE ONLY dump_test.test_second_table;\E /xm, like => { %full_runs, section_post_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE SCHEMA public' => { regexp => qr/^CREATE SCHEMA public;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'CREATE SCHEMA dump_test' => { create_order => 2, @@ -1916,7 +2191,8 @@ my %tests = ( regexp => qr/^CREATE SCHEMA dump_test;/m, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE SCHEMA dump_test_second_schema' => { create_order => 9, @@ -1925,7 +2201,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, }, + section_pre_data => 1, + }, + }, 'CREATE TABLE test_table' => { create_order => 3, @@ -1949,10 +2227,13 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, + exclude_test_table => 1, + }, + }, 'CREATE TABLE fk_reference_test_table' => { create_order => 21, @@ -1966,7 +2247,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TABLE test_second_table' => { create_order => 6, @@ -1982,7 +2264,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE UNLOGGED TABLE test_third_table WITH OIDS' => { create_order => 11, @@ -2003,11 +2286,14 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { # FIXME figure out why/how binary upgrade drops OIDs. - binary_upgrade => 1, }, }, + binary_upgrade => 1, + }, + }, 'CREATE TABLE measurement PARTITIONED BY' => { create_order => 90, @@ -2032,7 +2318,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { binary_upgrade => 1, - exclude_dump_test_schema => 1, }, }, + exclude_dump_test_schema => 1, + }, + }, 'CREATE TABLE measurement_y2006m2 PARTITION OF' => { create_order => 91, @@ -2049,8 +2337,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { binary_upgrade => 1, }, }, + section_pre_data => 1, + }, + unlike => { binary_upgrade => 1, }, + }, 'CREATE TABLE test_fourth_table_zero_col' => { create_order => 6, @@ -2062,7 +2352,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TABLE test_fifth_table' => { create_order => 53, @@ -2084,7 +2375,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE TABLE test_table_identity' => { create_order => 3, @@ -2109,7 +2401,8 @@ my %tests = ( /xms, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE STATISTICS extended_stats_no_options' => { create_order => 97, @@ -2120,7 +2413,8 @@ my %tests = ( /xms, like => { %full_runs, %dump_test_schema_runs, section_post_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE STATISTICS extended_stats_options' => { create_order => 97, @@ -2131,7 +2425,8 @@ my %tests = ( /xms, like => { %full_runs, %dump_test_schema_runs, section_post_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE SEQUENCE test_table_col1_seq' => { regexp => qr/^ @@ -2147,8 +2442,10 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + section_pre_data => 1, + }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE SEQUENCE test_third_table_col1_seq' => { regexp => qr/^ @@ -2163,7 +2460,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, }, + section_pre_data => 1, + }, + }, 'CREATE UNIQUE INDEX test_third_table_idx ON test_third_table' => { create_order => 13, @@ -2176,7 +2475,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_post_data => 1, }, }, + section_post_data => 1, + }, + }, 'CREATE INDEX ON ONLY measurement' => { create_order => 92, @@ -2201,14 +2502,17 @@ my %tests = ( schema_only => 1, section_post_data => 1, test_schema_plus_blobs => 1, - with_oids => 1, }, + with_oids => 1, + }, unlike => { exclude_dump_test_schema => 1, only_dump_test_table => 1, pg_dumpall_globals => 1, pg_dumpall_globals_clean => 1, role => 1, - section_pre_data => 1, }, }, + section_pre_data => 1, + }, + }, 'ALTER TABLE measurement PRIMARY KEY' => { all_runs => 1, @@ -2222,7 +2526,8 @@ my %tests = ( /xm, like => { %full_runs, %dump_test_schema_runs, section_post_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'CREATE INDEX ... ON measurement_y2006_m2' => { regexp => qr/^ @@ -2231,7 +2536,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_post_data => 1, }, }, + section_post_data => 1, + }, + }, 'ALTER INDEX ... ATTACH PARTITION' => { regexp => qr/^ @@ -2240,7 +2547,9 @@ my %tests = ( like => { %full_runs, role => 1, - section_post_data => 1, }, }, + section_post_data => 1, + }, + }, 'ALTER INDEX ... ATTACH PARTITION (primary key)' => { all_runs => 1, @@ -2264,14 +2573,17 @@ my %tests = ( role => 1, schema_only => 1, section_post_data => 1, - with_oids => 1, }, + with_oids => 1, + }, unlike => { only_dump_test_schema => 1, only_dump_test_table => 1, pg_dumpall_globals => 1, pg_dumpall_globals_clean => 1, section_pre_data => 1, - test_schema_plus_blobs => 1, }, }, + test_schema_plus_blobs => 1, + }, + }, 'CREATE VIEW test_view' => { create_order => 61, @@ -2285,7 +2597,8 @@ my %tests = ( \n\s+\QWITH LOCAL CHECK OPTION;\E/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, 'ALTER VIEW test_view SET DEFAULT' => { create_order => 62, @@ -2295,7 +2608,8 @@ my %tests = ( \QALTER TABLE ONLY dump_test.test_view ALTER COLUMN col1 SET DEFAULT 1;\E/xm, like => { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, - unlike => { exclude_dump_test_schema => 1, }, }, + unlike => { exclude_dump_test_schema => 1, }, + }, # FIXME 'DROP SCHEMA public (for testing without public schema)' => { @@ -2303,101 +2617,122 @@ my %tests = ( create_order => 100, create_sql => 'DROP SCHEMA public;', regexp => qr/^DROP SCHEMA public;/m, - like => {}, }, + like => {}, + }, 'DROP SCHEMA public' => { regexp => qr/^DROP SCHEMA public;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'DROP SCHEMA IF EXISTS public' => { regexp => qr/^DROP SCHEMA IF EXISTS public;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'DROP EXTENSION plpgsql' => { regexp => qr/^DROP EXTENSION plpgsql;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'DROP FUNCTION dump_test.pltestlang_call_handler()' => { regexp => qr/^DROP FUNCTION dump_test\.pltestlang_call_handler\(\);/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP LANGUAGE pltestlang' => { regexp => qr/^DROP PROCEDURAL LANGUAGE pltestlang;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP SCHEMA dump_test' => { regexp => qr/^DROP SCHEMA dump_test;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP SCHEMA dump_test_second_schema' => { regexp => qr/^DROP SCHEMA dump_test_second_schema;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP TABLE test_table' => { regexp => qr/^DROP TABLE dump_test\.test_table;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP TABLE fk_reference_test_table' => { regexp => qr/^DROP TABLE dump_test\.fk_reference_test_table;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP TABLE test_second_table' => { regexp => qr/^DROP TABLE dump_test\.test_second_table;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP TABLE test_third_table' => { regexp => qr/^DROP TABLE dump_test_second_schema\.test_third_table;/m, - like => { clean => 1, }, }, + like => { clean => 1, }, + }, 'DROP EXTENSION IF EXISTS plpgsql' => { regexp => qr/^DROP EXTENSION IF EXISTS plpgsql;/m, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'DROP FUNCTION IF EXISTS dump_test.pltestlang_call_handler()' => { regexp => qr/^ \QDROP FUNCTION IF EXISTS dump_test.pltestlang_call_handler();\E /xm, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP LANGUAGE IF EXISTS pltestlang' => { regexp => qr/^DROP PROCEDURAL LANGUAGE IF EXISTS pltestlang;/m, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP SCHEMA IF EXISTS dump_test' => { regexp => qr/^DROP SCHEMA IF EXISTS dump_test;/m, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP SCHEMA IF EXISTS dump_test_second_schema' => { regexp => qr/^DROP SCHEMA IF EXISTS dump_test_second_schema;/m, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP TABLE IF EXISTS test_table' => { regexp => qr/^DROP TABLE IF EXISTS dump_test\.test_table;/m, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP TABLE IF EXISTS test_second_table' => { regexp => qr/^DROP TABLE IF EXISTS dump_test\.test_second_table;/m, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP TABLE IF EXISTS test_third_table' => { regexp => qr/^ \QDROP TABLE IF EXISTS dump_test_second_schema.test_third_table;\E /xm, - like => { clean_if_exists => 1, }, }, + like => { clean_if_exists => 1, }, + }, 'DROP ROLE regress_dump_test_role' => { regexp => qr/^ \QDROP ROLE regress_dump_test_role;\E /xm, - like => { pg_dumpall_globals_clean => 1, }, }, + like => { pg_dumpall_globals_clean => 1, }, + }, 'DROP ROLE pg_' => { regexp => qr/^ @@ -2405,7 +2740,8 @@ my %tests = ( /xm, # this shouldn't ever get emitted anywhere - like => {}, }, + like => {}, + }, 'GRANT USAGE ON SCHEMA dump_test_second_schema' => { create_order => 10, @@ -2417,8 +2753,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON FOREIGN DATA WRAPPER dummy' => { create_order => 85, @@ -2428,7 +2766,8 @@ my %tests = ( \QGRANT ALL ON FOREIGN DATA WRAPPER dummy TO regress_dump_test_role;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON FOREIGN SERVER s1' => { create_order => 85, @@ -2438,7 +2777,8 @@ my %tests = ( \QGRANT ALL ON FOREIGN SERVER s1 TO regress_dump_test_role;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON DOMAIN dump_test.us_postal_code' => { create_order => 72, @@ -2451,7 +2791,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT USAGE ON TYPE dump_test.int42' => { create_order => 87, @@ -2464,7 +2806,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT USAGE ON TYPE dump_test.planets - ENUM' => { create_order => 66, @@ -2477,7 +2821,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT USAGE ON TYPE dump_test.textrange - RANGE' => { create_order => 67, @@ -2490,7 +2836,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT CREATE ON DATABASE dump_test' => { create_order => 48, @@ -2499,7 +2847,8 @@ my %tests = ( regexp => qr/^ \QGRANT CREATE ON DATABASE dump_test TO regress_dump_test_role;\E /xm, - like => { pg_dumpall_dbprivs => 1, }, }, + like => { pg_dumpall_dbprivs => 1, }, + }, 'GRANT SELECT ON TABLE test_table' => { create_order => 5, @@ -2511,11 +2860,14 @@ my %tests = ( %full_runs, %dump_test_schema_runs, only_dump_test_table => 1, - section_pre_data => 1, }, + section_pre_data => 1, + }, unlike => { exclude_dump_test_schema => 1, exclude_test_table => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT SELECT ON TABLE test_third_table' => { create_order => 19, @@ -2527,8 +2879,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT ALL ON SEQUENCE test_third_table_col1_seq' => { create_order => 28, @@ -2541,8 +2895,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT SELECT ON TABLE measurement' => { create_order => 91, @@ -2555,7 +2911,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT SELECT ON TABLE measurement_y2006m2' => { create_order => 92, @@ -2567,8 +2925,10 @@ my %tests = ( like => { %full_runs, role => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT ALL ON LARGE OBJECT ...' => { create_order => 60, @@ -2587,12 +2947,15 @@ my %tests = ( column_inserts => 1, data_only => 1, section_pre_data => 1, - test_schema_plus_blobs => 1, }, + test_schema_plus_blobs => 1, + }, unlike => { binary_upgrade => 1, no_blobs => 1, no_privs => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'GRANT INSERT(col1) ON TABLE test_second_table' => { create_order => 8, @@ -2606,7 +2969,9 @@ my %tests = ( { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, unlike => { exclude_dump_test_schema => 1, - no_privs => 1, }, }, + no_privs => 1, + }, + }, 'GRANT EXECUTE ON FUNCTION pg_sleep() TO regress_dump_test_role' => { create_order => 16, @@ -2616,7 +2981,8 @@ my %tests = ( \QGRANT ALL ON FUNCTION pg_catalog.pg_sleep(double precision) TO regress_dump_test_role;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'GRANT SELECT (proname ...) ON TABLE pg_proc TO public' => { create_order => 46, @@ -2684,7 +3050,8 @@ my %tests = ( \QGRANT SELECT(proconfig) ON TABLE pg_catalog.pg_proc TO PUBLIC;\E\n.* \QGRANT SELECT(proacl) ON TABLE pg_catalog.pg_proc TO PUBLIC;\E/xms, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON SCHEMA public TO public' => { regexp => qr/^ @@ -2693,7 +3060,8 @@ my %tests = ( /xm, # this shouldn't ever get emitted anymore - like => {}, }, + like => {}, + }, 'REFRESH MATERIALIZED VIEW matview' => { regexp => qr/^REFRESH MATERIALIZED VIEW dump_test.matview;/m, @@ -2702,7 +3070,9 @@ my %tests = ( unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, 'REFRESH MATERIALIZED VIEW matview_second' => { regexp => qr/^ @@ -2715,21 +3085,25 @@ my %tests = ( unlike => { binary_upgrade => 1, exclude_dump_test_schema => 1, - schema_only => 1, }, }, + schema_only => 1, + }, + }, # FIXME 'REFRESH MATERIALIZED VIEW matview_third' => { regexp => qr/^ \QREFRESH MATERIALIZED VIEW dump_test.matview_third;\E /xms, - like => {}, }, + like => {}, + }, # FIXME 'REFRESH MATERIALIZED VIEW matview_fourth' => { regexp => qr/^ \QREFRESH MATERIALIZED VIEW dump_test.matview_fourth;\E /xms, - like => {}, }, + like => {}, + }, 'REVOKE CONNECT ON DATABASE dump_test FROM public' => { create_order => 49, @@ -2739,7 +3113,8 @@ my %tests = ( \QGRANT TEMPORARY ON DATABASE dump_test TO PUBLIC;\E\n \QGRANT CREATE ON DATABASE dump_test TO regress_dump_test_role;\E /xm, - like => { pg_dumpall_dbprivs => 1, }, }, + like => { pg_dumpall_dbprivs => 1, }, + }, 'REVOKE EXECUTE ON FUNCTION pg_sleep() FROM public' => { create_order => 15, @@ -2749,7 +3124,8 @@ my %tests = ( \QREVOKE ALL ON FUNCTION pg_catalog.pg_sleep(double precision) FROM PUBLIC;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'REVOKE SELECT ON TABLE pg_proc FROM public' => { create_order => 45, @@ -2757,7 +3133,8 @@ my %tests = ( regexp => qr/^REVOKE SELECT ON TABLE pg_catalog.pg_proc FROM PUBLIC;/m, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'REVOKE CREATE ON SCHEMA public FROM public' => { create_order => 16, @@ -2767,7 +3144,8 @@ my %tests = ( \n\QGRANT USAGE ON SCHEMA public TO PUBLIC;\E /xm, like => { %full_runs, section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + unlike => { no_privs => 1, }, + }, 'REVOKE USAGE ON LANGUAGE plpgsql FROM public' => { create_order => 16, @@ -2778,8 +3156,10 @@ my %tests = ( %dump_test_schema_runs, only_dump_test_table => 1, role => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, ); @@ -2800,7 +3180,8 @@ $node->psql( 'postgres', "CREATE COLLATION testing FROM \"C\"; DROP COLLATION testing;", on_error_stop => 0, - stderr => \$collation_check_stderr); + stderr => \$collation_check_stderr +); if ($collation_check_stderr !~ /ERROR: /) { @@ -2903,7 +3284,8 @@ foreach my $test ( { 0; } - } keys %tests) + } keys %tests + ) { my $test_db = 'postgres'; @@ -2947,7 +3329,8 @@ command_fails_like( command_fails_like( [ 'pg_dump', '-p', "$port", '--role=regress_dump_test_role' ], qr/\Qpg_dump: [archiver (db)] query failed: ERROR: permission denied for\E/, - 'pg_dump: [archiver (db)] query failed: ERROR: permission denied for'); + 'pg_dump: [archiver (db)] query failed: ERROR: permission denied for' +); ######################################### # Test dumping a non-existent schema, table, and patterns with --strict-names @@ -2955,22 +3338,26 @@ command_fails_like( command_fails_like( [ 'pg_dump', '-p', "$port", '-n', 'nonexistant' ], qr/\Qpg_dump: no matching schemas were found\E/, - 'pg_dump: no matching schemas were found'); + 'pg_dump: no matching schemas were found' +); command_fails_like( [ 'pg_dump', '-p', "$port", '-t', 'nonexistant' ], qr/\Qpg_dump: no matching tables were found\E/, - 'pg_dump: no matching tables were found'); + 'pg_dump: no matching tables were found' +); command_fails_like( [ 'pg_dump', '-p', "$port", '--strict-names', '-n', 'nonexistant*' ], qr/\Qpg_dump: no matching schemas were found for pattern\E/, - 'pg_dump: no matching schemas were found for pattern'); + 'pg_dump: no matching schemas were found for pattern' +); command_fails_like( [ 'pg_dump', '-p', "$port", '--strict-names', '-t', 'nonexistant*' ], qr/\Qpg_dump: no matching tables were found for pattern\E/, - 'pg_dump: no matching tables were found for pattern'); + 'pg_dump: no matching tables were found for pattern' +); ######################################### # Run all runs @@ -3030,16 +3417,24 @@ foreach my $run (sort keys %pgdump_runs) if ($tests{$test}->{like}->{$test_key} && !defined($tests{$test}->{unlike}->{$test_key})) { - if (!ok($output_file =~ $tests{$test}->{regexp}, - "$run: should dump $test")) + if ( + !ok( + $output_file =~ $tests{$test}->{regexp}, + "$run: should dump $test" + ) + ) { diag("Review $run results in $tempdir"); } } else { - if (!ok($output_file !~ $tests{$test}->{regexp}, - "$run: should not dump $test")) + if ( + !ok( + $output_file !~ $tests{$test}->{regexp}, + "$run: should not dump $test" + ) + ) { diag("Review $run results in $tempdir"); } diff --git a/src/bin/pg_dump/t/010_dump_connstr.pl b/src/bin/pg_dump/t/010_dump_connstr.pl index bf9bd52..ae651f3 100644 --- a/src/bin/pg_dump/t/010_dump_connstr.pl +++ b/src/bin/pg_dump/t/010_dump_connstr.pl @@ -34,9 +34,12 @@ $node->init(extra => [ '--locale=C', '--encoding=LATIN1' ]); # prep pg_hba.conf and pg_ident.conf $node->run_log( - [ $ENV{PG_REGRESS}, '--config-auth', + [ + $ENV{PG_REGRESS}, '--config-auth', $node->data_dir, '--create-role', - "$dbname1,$dbname2,$dbname3,$dbname4" ]); + "$dbname1,$dbname2,$dbname3,$dbname4" + ] +); $node->start; my $backupdir = $node->backup_dir; @@ -54,25 +57,37 @@ foreach my $dbname ($dbname1, $dbname2, $dbname3, $dbname4, 'CamelCase') # For these tests, pg_dumpall -r is used because it produces a short # dump. $node->command_ok( - [ 'pg_dumpall', '-r', '-f', $discard, '--dbname', + [ + 'pg_dumpall', '-r', '-f', $discard, '--dbname', $node->connstr($dbname1), - '-U', $dbname4 ], - 'pg_dumpall with long ASCII name 1'); + '-U', $dbname4 + ], + 'pg_dumpall with long ASCII name 1' +); $node->command_ok( - [ 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', + [ + 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', $node->connstr($dbname2), - '-U', $dbname3 ], - 'pg_dumpall with long ASCII name 2'); + '-U', $dbname3 + ], + 'pg_dumpall with long ASCII name 2' +); $node->command_ok( - [ 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', + [ + 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', $node->connstr($dbname3), - '-U', $dbname2 ], - 'pg_dumpall with long ASCII name 3'); + '-U', $dbname2 + ], + 'pg_dumpall with long ASCII name 3' +); $node->command_ok( - [ 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', + [ + 'pg_dumpall', '--no-sync', '-r', '-f', $discard, '--dbname', $node->connstr($dbname4), - '-U', $dbname1 ], - 'pg_dumpall with long ASCII name 4'); + '-U', $dbname1 + ], + 'pg_dumpall with long ASCII name 4' +); $node->command_ok( [ 'pg_dumpall', '--no-sync', '-r', '-l', 'dbname=template1' ], 'pg_dumpall -l accepts connection string'); @@ -82,7 +97,8 @@ $node->run_log([ 'createdb', "foo\n\rbar" ]); # not sufficient to use -r here $node->command_fails( [ 'pg_dumpall', '--no-sync', '-f', $discard ], - 'pg_dumpall with \n\r in database name'); + 'pg_dumpall with \n\r in database name' +); $node->run_log([ 'dropdb', "foo\n\rbar" ]); @@ -91,9 +107,12 @@ $node->safe_psql($dbname1, 'CREATE TABLE t0()'); # XXX no printed message when this fails, just SIGPIPE termination $node->command_ok( - [ 'pg_dump', '-Fd', '--no-sync', '-j2', '-f', $dirfmt, '-U', $dbname1, - $node->connstr($dbname1) ], - 'parallel dump'); + [ + 'pg_dump', '-Fd', '--no-sync', '-j2', '-f', $dirfmt, '-U', $dbname1, + $node->connstr($dbname1) + ], + 'parallel dump' +); # recreate $dbname1 for restore test $node->run_log([ 'dropdb', $dbname1 ]); @@ -101,15 +120,19 @@ $node->run_log([ 'createdb', $dbname1 ]); $node->command_ok( [ 'pg_restore', '-v', '-d', 'template1', '-j2', '-U', $dbname1, $dirfmt ], - 'parallel restore'); + 'parallel restore' +); $node->run_log([ 'dropdb', $dbname1 ]); $node->command_ok( - [ 'pg_restore', '-C', '-v', '-d', + [ + 'pg_restore', '-C', '-v', '-d', 'template1', '-j2', '-U', $dbname1, - $dirfmt ], - 'parallel restore with create'); + $dirfmt + ], + 'parallel restore with create' +); $node->command_ok([ 'pg_dumpall', '--no-sync', '-f', $plain, '-U', $dbname1 ], @@ -127,9 +150,12 @@ my $envar_node = get_new_node('destination_envar'); $envar_node->init( extra => [ '-U', $bootstrap_super, '--locale=C', '--encoding=LATIN1' ]); $envar_node->run_log( - [ $ENV{PG_REGRESS}, '--config-auth', + [ + $ENV{PG_REGRESS}, '--config-auth', $envar_node->data_dir, '--create-role', - "$bootstrap_super,$restore_super" ]); + "$bootstrap_super,$restore_super" + ] +); $envar_node->start; # make superuser for restore @@ -157,18 +183,24 @@ my $cmdline_node = get_new_node('destination_cmdline'); $cmdline_node->init( extra => [ '-U', $bootstrap_super, '--locale=C', '--encoding=LATIN1' ]); $cmdline_node->run_log( - [ $ENV{PG_REGRESS}, '--config-auth', + [ + $ENV{PG_REGRESS}, '--config-auth', $cmdline_node->data_dir, '--create-role', - "$bootstrap_super,$restore_super" ]); + "$bootstrap_super,$restore_super" + ] +); $cmdline_node->start; $cmdline_node->run_log( [ 'createuser', '-U', $bootstrap_super, '-s', $restore_super ]); { $result = run_log( - [ 'psql', '-p', $cmdline_node->port, '-U', - $restore_super, '-X', '-f', $plain ], + [ + 'psql', '-p', $cmdline_node->port, '-U', + $restore_super, '-X', '-f', $plain + ], '2>', - \$stderr); + \$stderr + ); } ok($result, 'restore full dump with command-line options for connection parameters'); diff --git a/src/bin/pg_resetwal/t/002_corrupted.pl b/src/bin/pg_resetwal/t/002_corrupted.pl index ab840d1..f9a7b3f 100644 --- a/src/bin/pg_resetwal/t/002_corrupted.pl +++ b/src/bin/pg_resetwal/t/002_corrupted.pl @@ -31,9 +31,11 @@ command_checks_all( [ 'pg_resetwal', '-n', $node->data_dir ], 0, [qr/pg_control version number/], - [ qr/pg_resetwal: pg_control exists but is broken or wrong version; ignoring it/ + [ + qr/pg_resetwal: pg_control exists but is broken or wrong version; ignoring it/ ], - 'processes corrupted pg_control all zeroes'); + 'processes corrupted pg_control all zeroes' +); # Put in the previously saved header data. This uses a different code # path internally, allowing us to process a zero WAL segment size. @@ -46,6 +48,8 @@ command_checks_all( [ 'pg_resetwal', '-n', $node->data_dir ], 0, [qr/pg_control version number/], - [ qr/\Qpg_resetwal: pg_control specifies invalid WAL segment size (0 bytes); proceed with caution\E/ + [ + qr/\Qpg_resetwal: pg_control specifies invalid WAL segment size (0 bytes); proceed with caution\E/ ], - 'processes zero WAL segment size'); + 'processes zero WAL segment size' +); diff --git a/src/bin/pg_rewind/RewindTest.pm b/src/bin/pg_rewind/RewindTest.pm index 278ffd8..3e6f03e 100644 --- a/src/bin/pg_rewind/RewindTest.pm +++ b/src/bin/pg_rewind/RewindTest.pm @@ -92,7 +92,8 @@ sub check_query my $result = run [ 'psql', '-q', '-A', '-t', '--no-psqlrc', '-d', $node_master->connstr('postgres'), - '-c', $query ], + '-c', $query + ], '>', \$stdout, '2>', \$stderr; # We don't use ok() for the exit code and stderr, because we want this @@ -128,7 +129,8 @@ sub setup_cluster $node_master->append_conf( 'postgresql.conf', qq( wal_keep_segments = 20 -)); +) + ); } sub start_master @@ -154,7 +156,8 @@ sub create_standby primary_conninfo='$connstr_master application_name=rewind_standby' standby_mode=on recovery_target_timeline='latest' -)); +) + ); # Start standby $node_standby->start; @@ -204,7 +207,8 @@ sub run_pg_rewind # overwritten during the rewind. copy( "$master_pgdata/postgresql.conf", - "$tmp_folder/master-postgresql.conf.tmp"); + "$tmp_folder/master-postgresql.conf.tmp" + ); # Now run pg_rewind if ($test_mode eq "local") @@ -214,21 +218,27 @@ sub run_pg_rewind # Stop the master and be ready to perform the rewind $node_standby->stop; command_ok( - [ 'pg_rewind', + [ + 'pg_rewind', "--debug", "--source-pgdata=$standby_pgdata", - "--target-pgdata=$master_pgdata" ], - 'pg_rewind local'); + "--target-pgdata=$master_pgdata" + ], + 'pg_rewind local' + ); } elsif ($test_mode eq "remote") { # Do rewind using a remote connection as source command_ok( - [ 'pg_rewind', "--debug", + [ + 'pg_rewind', "--debug", "--source-server", $standby_connstr, - "--target-pgdata=$master_pgdata" ], - 'pg_rewind remote'); + "--target-pgdata=$master_pgdata" + ], + 'pg_rewind remote' + ); } else { @@ -240,11 +250,13 @@ sub run_pg_rewind # Now move back postgresql.conf with old settings move( "$tmp_folder/master-postgresql.conf.tmp", - "$master_pgdata/postgresql.conf"); + "$master_pgdata/postgresql.conf" + ); chmod( $node_master->group_access() ? 0640 : 0600, - "$master_pgdata/postgresql.conf") + "$master_pgdata/postgresql.conf" + ) or BAIL_OUT( "unable to set permissions for $master_pgdata/postgresql.conf"); @@ -255,7 +267,8 @@ sub run_pg_rewind primary_conninfo='port=$port_standby' standby_mode=on recovery_target_timeline='latest' -)); +) + ); # Restart the master to check that rewind went correctly $node_master->start; diff --git a/src/bin/pg_rewind/t/001_basic.pl b/src/bin/pg_rewind/t/001_basic.pl index 87bb71e..3aec3fe 100644 --- a/src/bin/pg_rewind/t/001_basic.pl +++ b/src/bin/pg_rewind/t/001_basic.pl @@ -71,20 +71,23 @@ sub run_test in master, before promotion in standby, after promotion ), - 'table content'); + 'table content' + ); check_query( 'SELECT * FROM trunc_tbl', qq(in master in master, before promotion ), - 'truncation'); + 'truncation' + ); check_query( 'SELECT count(*) FROM tail_tbl', qq(10001 ), - 'tail-copy'); + 'tail-copy' + ); # Permissions on PGDATA should be default SKIP: diff --git a/src/bin/pg_rewind/t/002_databases.pl b/src/bin/pg_rewind/t/002_databases.pl index bef0e17..d368cda 100644 --- a/src/bin/pg_rewind/t/002_databases.pl +++ b/src/bin/pg_rewind/t/002_databases.pl @@ -40,7 +40,8 @@ standby_afterpromotion template0 template1 ), - 'database names'); + 'database names' + ); # Permissions on PGDATA should have group permissions SKIP: diff --git a/src/bin/pg_rewind/t/003_extrafiles.pl b/src/bin/pg_rewind/t/003_extrafiles.pl index 8f4f972..b099190 100644 --- a/src/bin/pg_rewind/t/003_extrafiles.pl +++ b/src/bin/pg_rewind/t/003_extrafiles.pl @@ -62,11 +62,13 @@ sub run_test push @paths, $File::Find::name if $File::Find::name =~ m/.*tst_.*/; }, - $test_master_datadir); + $test_master_datadir + ); @paths = sort @paths; is_deeply( \@paths, - [ "$test_master_datadir/tst_both_dir", + [ + "$test_master_datadir/tst_both_dir", "$test_master_datadir/tst_both_dir/both_file1", "$test_master_datadir/tst_both_dir/both_file2", "$test_master_datadir/tst_both_dir/both_subdir", @@ -77,7 +79,8 @@ sub run_test "$test_master_datadir/tst_standby_dir/standby_subdir", "$test_master_datadir/tst_standby_dir/standby_subdir/standby_file3" ], - "file lists match"); + "file lists match" + ); RewindTest::clean_rewind_test(); } diff --git a/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl index feadaa6..bff539b 100644 --- a/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl +++ b/src/bin/pg_rewind/t/004_pg_xlog_symlink.pl @@ -69,7 +69,8 @@ sub run_test in master, before promotion in standby, after promotion ), - 'table content'); + 'table content' + ); RewindTest::clean_rewind_test(); } diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 947f13d..29b2733 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -59,8 +59,11 @@ pgbench( [qr{processed: 125/125}], [qr{^$}], 'concurrency OID generation', - { '001_pgbench_concurrent_oid_generation' => - 'INSERT INTO oid_tbl SELECT FROM generate_series(1,1000);' }); + { + '001_pgbench_concurrent_oid_generation' => + 'INSERT INTO oid_tbl SELECT FROM generate_series(1,1000);' + } +); # cleanup $node->safe_psql('postgres', 'DROP TABLE oid_tbl;'); @@ -70,83 +73,107 @@ pgbench( 'no-such-database', 1, [qr{^$}], - [ qr{connection to database "no-such-database" failed}, - qr{FATAL: database "no-such-database" does not exist} ], - 'no such database'); + [ + qr{connection to database "no-such-database" failed}, + qr{FATAL: database "no-such-database" does not exist} + ], + 'no such database' +); pgbench( '-S -t 1', 1, [qr{^$}], [qr{Perhaps you need to do initialization}], - 'run without init'); + 'run without init' +); # Initialize pgbench tables scale 1 pgbench( '-i', 0, [qr{^$}], - [ qr{creating tables}, qr{vacuuming}, - qr{creating primary keys}, qr{done\.} ], - 'pgbench scale 1 initialization',); + [ + qr{creating tables}, qr{vacuuming}, + qr{creating primary keys}, qr{done\.} + ], + 'pgbench scale 1 initialization', +); # Again, with all possible options pgbench( '--initialize --init-steps=dtpvg --scale=1 --unlogged-tables --fillfactor=98 --foreign-keys --quiet --tablespace=pg_default --index-tablespace=pg_default', 0, [qr{^$}i], - [ qr{dropping old tables}, + [ + qr{dropping old tables}, qr{creating tables}, qr{vacuuming}, qr{creating primary keys}, qr{creating foreign keys}, - qr{done\.} ], - 'pgbench scale 1 initialization'); + qr{done\.} + ], + 'pgbench scale 1 initialization' +); # Test interaction of --init-steps with legacy step-selection options pgbench( '--initialize --init-steps=dtpvgvv --no-vacuum --foreign-keys --unlogged-tables', 0, [qr{^$}], - [ qr{dropping old tables}, + [ + qr{dropping old tables}, qr{creating tables}, qr{creating primary keys}, qr{.* of .* tuples \(.*\) done}, qr{creating foreign keys}, - qr{done\.} ], - 'pgbench --init-steps'); + qr{done\.} + ], + 'pgbench --init-steps' +); # Run all builtin scripts, for a few transactions each pgbench( '--transactions=5 -Dfoo=bla --client=2 --protocol=simple --builtin=t' . ' --connect -n -v -n', 0, - [ qr{builtin: TPC-B}, + [ + qr{builtin: TPC-B}, qr{clients: 2\b}, qr{processed: 10/10}, - qr{mode: simple} ], + qr{mode: simple} + ], [qr{^$}], - 'pgbench tpcb-like'); + 'pgbench tpcb-like' +); pgbench( '--transactions=20 --client=5 -M extended --builtin=si -C --no-vacuum -s 1', 0, - [ qr{builtin: simple update}, + [ + qr{builtin: simple update}, qr{clients: 5\b}, qr{threads: 1\b}, qr{processed: 100/100}, - qr{mode: extended} ], + qr{mode: extended} + ], [qr{scale option ignored}], - 'pgbench simple update'); + 'pgbench simple update' +); pgbench( '-t 100 -c 7 -M prepared -b se --debug', 0, - [ qr{builtin: select only}, + [ + qr{builtin: select only}, qr{clients: 7\b}, qr{threads: 1\b}, qr{processed: 700/700}, - qr{mode: prepared} ], - [ qr{vacuum}, qr{client 0}, qr{client 1}, qr{sending}, - qr{receiving}, qr{executing} ], - 'pgbench select only'); + qr{mode: prepared} + ], + [ + qr{vacuum}, qr{client 0}, qr{client 1}, qr{sending}, + qr{receiving}, qr{executing} + ], + 'pgbench select only' +); # check if threads are supported my $nthreads = 2; @@ -161,16 +188,19 @@ my $nthreads = 2; pgbench( "-t 100 -c 1 -j $nthreads -M prepared -n", 0, - [ qr{type: multiple scripts}, + [ + qr{type: multiple scripts}, qr{mode: prepared}, qr{script 1: .*/001_pgbench_custom_script_1}, qr{weight: 2}, qr{script 2: .*/001_pgbench_custom_script_2}, qr{weight: 1}, - qr{processed: 100/100} ], + qr{processed: 100/100} + ], [qr{^$}], 'pgbench custom scripts', - { '001_pgbench_custom_script_1@1' => q{-- select only + { + '001_pgbench_custom_script_1@1' => q{-- select only \set aid random(1, :scale * 100000) SELECT abalance::INTEGER AS balance FROM pgbench_accounts @@ -182,41 +212,53 @@ BEGIN; -- cast are needed for typing under -M prepared SELECT :foo::INT + :scale::INT * :client_id::INT AS bla; COMMIT; -} }); +} + } +); pgbench( '-n -t 10 -c 1 -M simple', 0, - [ qr{type: .*/001_pgbench_custom_script_3}, + [ + qr{type: .*/001_pgbench_custom_script_3}, qr{processed: 10/10}, - qr{mode: simple} ], + qr{mode: simple} + ], [qr{^$}], 'pgbench custom script', - { '001_pgbench_custom_script_3' => q{-- select only variant + { + '001_pgbench_custom_script_3' => q{-- select only variant \set aid random(1, :scale * 100000) BEGIN; SELECT abalance::INTEGER AS balance FROM pgbench_accounts WHERE aid=:aid; COMMIT; -} }); +} + } +); pgbench( '-n -t 10 -c 2 -M extended', 0, - [ qr{type: .*/001_pgbench_custom_script_4}, + [ + qr{type: .*/001_pgbench_custom_script_4}, qr{processed: 20/20}, - qr{mode: extended} ], + qr{mode: extended} + ], [qr{^$}], 'pgbench custom script', - { '001_pgbench_custom_script_4' => q{-- select only variant + { + '001_pgbench_custom_script_4' => q{-- select only variant \set aid random(1, :scale * 100000) BEGIN; SELECT abalance::INTEGER AS balance FROM pgbench_accounts WHERE aid=:aid; COMMIT; -} }); +} + } +); # test expressions # command 1..3 and 23 depend on random seed which is used to call srandom. @@ -224,7 +266,8 @@ pgbench( '--random-seed=5432 -t 1 -Dfoo=-10.1 -Dbla=false -Di=+3 -Dminint=-9223372036854775808 -Dn=null -Dt=t -Df=of -Dd=1.0', 0, [ qr{type: .*/001_pgbench_expressions}, qr{processed: 1/1} ], - [ qr{setting random seed to 5432\b}, + [ + qr{setting random seed to 5432\b}, # After explicit seeding, the four * random checks (1-3,20) should be # deterministic, but not necessarily portable. @@ -289,7 +332,8 @@ pgbench( qr{command=98.: int 5432\b}, # :random_seed ], 'pgbench expressions', - { '001_pgbench_expressions' => q{-- integer functions + { + '001_pgbench_expressions' => q{-- integer functions \set i1 debug(random(10, 19)) \set i2 debug(random_exponential(100, 199, 10.0)) \set i3 debug(random_gaussian(1000, 1999, 10.0)) @@ -411,7 +455,9 @@ SELECT :v0, :v1, :v2, :v3; \set sc debug(:scale) \set ci debug(:client_id) \set rs debug(:random_seed) -} }); +} + } +); # random determinism when seeded $node->safe_psql('postgres', @@ -428,7 +474,8 @@ for my $i (1, 2) [qr{processed: 1/1}], [qr{setting random seed to $seed\b}], "random seeded with $seed", - { "001_pgbench_random_seed_$i" => q{-- test random functions + { + "001_pgbench_random_seed_$i" => q{-- test random functions \set ur random(1000, 1999) \set er random_exponential(2000, 2999, 2.0) \set gr random_gaussian(3000, 3999, 3.0) @@ -438,7 +485,9 @@ INSERT INTO seeded_random(seed, rand, val) VALUES (:random_seed, 'exponential', :er), (:random_seed, 'gaussian', :gr), (:random_seed, 'zipfian', :zr); -} }); +} + } + ); } # check that all runs generated the same 4 values @@ -450,10 +499,14 @@ ok($ret == 0, "psql seeded_random count ok"); ok($err eq '', "psql seeded_random count stderr is empty"); ok($out =~ /\b$seed\|uniform\|1\d\d\d\|2/, "psql seeded_random count uniform"); -ok( $out =~ /\b$seed\|exponential\|2\d\d\d\|2/, - "psql seeded_random count exponential"); -ok( $out =~ /\b$seed\|gaussian\|3\d\d\d\|2/, - "psql seeded_random count gaussian"); +ok( + $out =~ /\b$seed\|exponential\|2\d\d\d\|2/, + "psql seeded_random count exponential" +); +ok( + $out =~ /\b$seed\|gaussian\|3\d\d\d\|2/, + "psql seeded_random count gaussian" +); ok($out =~ /\b$seed\|zipfian\|4\d\d\d\|2/, "psql seeded_random count zipfian"); @@ -462,12 +515,15 @@ $node->safe_psql('postgres', 'DROP TABLE seeded_random;'); # backslash commands pgbench( '-t 1', 0, - [ qr{type: .*/001_pgbench_backslash_commands}, + [ + qr{type: .*/001_pgbench_backslash_commands}, qr{processed: 1/1}, - qr{shell-echo-output} ], + qr{shell-echo-output} + ], [qr{command=8.: int 2\b}], 'pgbench backslash commands', - { '001_pgbench_backslash_commands' => q{-- run set + { + '001_pgbench_backslash_commands' => q{-- run set \set zero 0 \set one 1.0 -- sleep @@ -482,36 +538,49 @@ pgbench( \set n debug(:two) -- shell \shell echo shell-echo-output -} }); +} + } +); # trigger many expression errors my @errors = ( # [ test name, script number, status, stderr match ] # SQL - [ 'sql syntax error', + [ + 'sql syntax error', 0, - [ qr{ERROR: syntax error}, - qr{prepared statement .* does not exist} ], + [ + qr{ERROR: syntax error}, + qr{prepared statement .* does not exist} + ], q{-- SQL syntax error SELECT 1 + ; -} ], - [ 'sql too many args', 1, [qr{statement has too many arguments.*\b9\b}], +} + ], + [ + 'sql too many args', 1, [qr{statement has too many arguments.*\b9\b}], q{-- MAX_ARGS=10 for prepared \set i 0 SELECT LEAST(:i, :i, :i, :i, :i, :i, :i, :i, :i, :i, :i); -} ], +} + ], # SHELL - [ 'shell bad command', 0, - [qr{\(shell\) .* meta-command failed}], q{\shell no-such-command} ], - [ 'shell undefined variable', 0, + [ + 'shell bad command', 0, + [qr{\(shell\) .* meta-command failed}], q{\shell no-such-command} + ], + [ + 'shell undefined variable', 0, [qr{undefined variable ":nosuchvariable"}], q{-- undefined variable in shell \shell echo ::foo :nosuchvariable -} ], +} + ], [ 'shell missing command', 1, [qr{missing command }], q{\shell} ], - [ 'shell too many args', 1, [qr{too many arguments in command "shell"}], + [ + 'shell too many args', 1, [qr{too many arguments in command "shell"}], q{-- 257 arguments to \shell \shell echo \ 0 1 2 3 4 5 6 7 8 9 A B C D E F \ @@ -530,95 +599,155 @@ SELECT LEAST(:i, :i, :i, :i, :i, :i, :i, :i, :i, :i, :i); 0 1 2 3 4 5 6 7 8 9 A B C D E F \ 0 1 2 3 4 5 6 7 8 9 A B C D E F \ 0 1 2 3 4 5 6 7 8 9 A B C D E F -} ], +} + ], # SET - [ 'set syntax error', 1, - [qr{syntax error in command "set"}], q{\set i 1 +} ], - [ 'set no such function', 1, - [qr{unexpected function name}], q{\set i noSuchFunction()} ], - [ 'set invalid variable name', 0, - [qr{invalid variable name}], q{\set . 1} ], - [ 'set int overflow', 0, - [qr{double to int overflow for 100}], q{\set i int(1E32)} ], + [ + 'set syntax error', 1, + [qr{syntax error in command "set"}], q{\set i 1 +} + ], + [ + 'set no such function', 1, + [qr{unexpected function name}], q{\set i noSuchFunction()} + ], + [ + 'set invalid variable name', 0, + [qr{invalid variable name}], q{\set . 1} + ], + [ + 'set int overflow', 0, + [qr{double to int overflow for 100}], q{\set i int(1E32)} + ], [ 'set division by zero', 0, [qr{division by zero}], q{\set i 1/0} ], - [ 'set bigint out of range', 0, - [qr{bigint out of range}], q{\set i 9223372036854775808 / -1} ], - [ 'set undefined variable', + [ + 'set bigint out of range', 0, + [qr{bigint out of range}], q{\set i 9223372036854775808 / -1} + ], + [ + 'set undefined variable', 0, [qr{undefined variable "nosuchvariable"}], - q{\set i :nosuchvariable} ], + q{\set i :nosuchvariable} + ], [ 'set unexpected char', 1, [qr{unexpected character .;.}], q{\set i ;} ], - [ 'set too many args', + [ + 'set too many args', 0, [qr{too many function arguments}], - q{\set i least(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)} ], - [ 'set empty random range', 0, - [qr{empty range given to random}], q{\set i random(5,3)} ], - [ 'set random range too large', + q{\set i least(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)} + ], + [ + 'set empty random range', 0, + [qr{empty range given to random}], q{\set i random(5,3)} + ], + [ + 'set random range too large', 0, [qr{random range is too large}], - q{\set i random(-9223372036854775808, 9223372036854775807)} ], - [ 'set gaussian param too small', + q{\set i random(-9223372036854775808, 9223372036854775807)} + ], + [ + 'set gaussian param too small', 0, [qr{gaussian param.* at least 2}], - q{\set i random_gaussian(0, 10, 1.0)} ], - [ 'set exponential param greater 0', + q{\set i random_gaussian(0, 10, 1.0)} + ], + [ + 'set exponential param greater 0', 0, [qr{exponential parameter must be greater }], - q{\set i random_exponential(0, 10, 0.0)} ], - [ 'set zipfian param to 1', + q{\set i random_exponential(0, 10, 0.0)} + ], + [ + 'set zipfian param to 1', 0, [qr{zipfian parameter must be in range \(0, 1\) U \(1, \d+\]}], - q{\set i random_zipfian(0, 10, 1)} ], - [ 'set zipfian param too large', + q{\set i random_zipfian(0, 10, 1)} + ], + [ + 'set zipfian param too large', 0, [qr{zipfian parameter must be in range \(0, 1\) U \(1, \d+\]}], - q{\set i random_zipfian(0, 10, 1000000)} ], - [ 'set non numeric value', 0, - [qr{malformed variable "foo" value: "bla"}], q{\set i :foo + 1} ], + q{\set i random_zipfian(0, 10, 1000000)} + ], + [ + 'set non numeric value', 0, + [qr{malformed variable "foo" value: "bla"}], q{\set i :foo + 1} + ], [ 'set no expression', 1, [qr{syntax error}], q{\set i} ], [ 'set missing argument', 1, [qr{missing argument}i], q{\set} ], - [ 'set not a bool', 0, - [qr{cannot coerce double to boolean}], q{\set b NOT 0.0} ], - [ 'set not an int', 0, - [qr{cannot coerce boolean to int}], q{\set i TRUE + 2} ], - [ 'set not a double', 0, - [qr{cannot coerce boolean to double}], q{\set d ln(TRUE)} ], - [ 'set case error', + [ + 'set not a bool', 0, + [qr{cannot coerce double to boolean}], q{\set b NOT 0.0} + ], + [ + 'set not an int', 0, + [qr{cannot coerce boolean to int}], q{\set i TRUE + 2} + ], + [ + 'set not a double', 0, + [qr{cannot coerce boolean to double}], q{\set d ln(TRUE)} + ], + [ + 'set case error', 1, [qr{syntax error in command "set"}], - q{\set i CASE TRUE THEN 1 ELSE 0 END} ], - [ 'set random error', 0, - [qr{cannot coerce boolean to int}], q{\set b random(FALSE, TRUE)} ], - [ 'set number of args mismatch', 1, - [qr{unexpected number of arguments}], q{\set d ln(1.0, 2.0))} ], - [ 'set at least one arg', 1, - [qr{at least one argument expected}], q{\set i greatest())} ], + q{\set i CASE TRUE THEN 1 ELSE 0 END} + ], + [ + 'set random error', 0, + [qr{cannot coerce boolean to int}], q{\set b random(FALSE, TRUE)} + ], + [ + 'set number of args mismatch', 1, + [qr{unexpected number of arguments}], q{\set d ln(1.0, 2.0))} + ], + [ + 'set at least one arg', 1, + [qr{at least one argument expected}], q{\set i greatest())} + ], # SETSHELL - [ 'setshell not an int', 0, - [qr{command must return an integer}], q{\setshell i echo -n one} ], + [ + 'setshell not an int', 0, + [qr{command must return an integer}], q{\setshell i echo -n one} + ], [ 'setshell missing arg', 1, [qr{missing argument }], q{\setshell var} ], - [ 'setshell no such command', 0, - [qr{could not read result }], q{\setshell var no-such-command} ], + [ + 'setshell no such command', 0, + [qr{could not read result }], q{\setshell var no-such-command} + ], # SLEEP - [ 'sleep undefined variable', 0, - [qr{sleep: undefined variable}], q{\sleep :nosuchvariable} ], - [ 'sleep too many args', 1, - [qr{too many arguments}], q{\sleep too many args} ], - [ 'sleep missing arg', 1, - [ qr{missing argument}, qr{\\sleep} ], q{\sleep} ], - [ 'sleep unknown unit', 1, - [qr{unrecognized time unit}], q{\sleep 1 week} ], + [ + 'sleep undefined variable', 0, + [qr{sleep: undefined variable}], q{\sleep :nosuchvariable} + ], + [ + 'sleep too many args', 1, + [qr{too many arguments}], q{\sleep too many args} + ], + [ + 'sleep missing arg', 1, + [ qr{missing argument}, qr{\\sleep} ], q{\sleep} + ], + [ + 'sleep unknown unit', 1, + [qr{unrecognized time unit}], q{\sleep 1 week} + ], # MISC - [ 'misc invalid backslash command', 1, - [qr{invalid command .* "nosuchcommand"}], q{\nosuchcommand} ], + [ + 'misc invalid backslash command', 1, + [qr{invalid command .* "nosuchcommand"}], q{\nosuchcommand} + ], [ 'misc empty script', 1, [qr{empty command list for script}], q{} ], - [ 'bad boolean', 0, - [qr{malformed variable.*trueXXX}], q{\set b :badtrue or true} ],); + [ + 'bad boolean', 0, + [qr{malformed variable.*trueXXX}], q{\set b :badtrue or true} + ], +); for my $e (@errors) @@ -632,7 +761,8 @@ for my $e (@errors) [ $status ? qr{^$} : qr{processed: 0/1} ], $re, 'pgbench script error: ' . $name, - { $n => $script }); + { $n => $script } + ); } # zipfian cache array overflow @@ -641,7 +771,8 @@ pgbench( [ qr{processed: 1/1}, qr{zipfian cache array overflowed 1 time\(s\)} ], [qr{^}], 'pgbench zipfian array overflow on random_zipfian', - { '001_pgbench_random_zipfian' => q{ + { + '001_pgbench_random_zipfian' => q{ \set i random_zipfian(1, 100, 0.5) \set i random_zipfian(2, 100, 0.5) \set i random_zipfian(3, 100, 0.5) @@ -658,7 +789,9 @@ pgbench( \set i random_zipfian(14, 100, 0.5) \set i random_zipfian(15, 100, 0.5) \set i random_zipfian(16, 100, 0.5) -} }); +} + } +); # throttling pgbench( @@ -666,19 +799,23 @@ pgbench( 0, [ qr{processed: 200/200}, qr{builtin: select only} ], [qr{^$}], - 'pgbench throttling'); + 'pgbench throttling' +); pgbench( # given the expected rate and the 2 ms tx duration, at most one is executed '-t 10 --rate=100000 --latency-limit=1 -n -r', 0, - [ qr{processed: [01]/10}, + [ + qr{processed: [01]/10}, qr{type: .*/001_pgbench_sleep}, - qr{above the 1.0 ms latency limit: [01]/} ], + qr{above the 1.0 ms latency limit: [01]/} + ], [qr{^$}i], 'pgbench late throttling', - { '001_pgbench_sleep' => q{\sleep 2ms} }); + { '001_pgbench_sleep' => q{\sleep 2ms} } +); # check log contents and cleanup sub check_pgbench_logs @@ -696,10 +833,14 @@ sub check_pgbench_logs open my $fh, '<', $log or die "$@"; my @contents = <$fh>; my $clen = @contents; - ok( $min <= $clen && $clen <= $max, - "transaction count for $log ($clen)"); - ok( grep($re, @contents) == $clen, - "transaction format for $prefix"); + ok( + $min <= $clen && $clen <= $max, + "transaction count for $log ($clen)" + ); + ok( + grep($re, @contents) == $clen, + "transaction format for $prefix" + ); close $fh or die "$@"; }; } @@ -714,7 +855,8 @@ pgbench( 0, [ qr{select only}, qr{processed: 100/100} ], [qr{^$}], - 'pgbench logs'); + 'pgbench logs' +); check_pgbench_logs("$bdir/001_pgbench_log_2", 1, 8, 92, qr{^0 \d{1,2} \d+ \d \d+ \d+$}); @@ -723,7 +865,8 @@ check_pgbench_logs("$bdir/001_pgbench_log_2", 1, 8, 92, pgbench( "-n -b se -t 10 -l --log-prefix=$bdir/001_pgbench_log_3", 0, [ qr{select only}, qr{processed: 10/10} ], - [qr{^$}], 'pgbench logs contents'); + [qr{^$}], 'pgbench logs contents' +); check_pgbench_logs("$bdir/001_pgbench_log_3", 1, 10, 10, qr{^\d \d{1,2} \d+ \d \d+ \d+$}); diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index 7dcc812..91c10e1 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -57,81 +57,127 @@ sub pgbench_scripts my @options = ( # name, options, stderr checks - [ 'bad option', + [ + 'bad option', '-h home -p 5432 -U calvin -d --bad-option', - [ qr{(unrecognized|illegal) option}, qr{--help.*more information} ] ], - [ 'no file', + [ qr{(unrecognized|illegal) option}, qr{--help.*more information} ] + ], + [ + 'no file', '-f no-such-file', - [qr{could not open file "no-such-file":}] ], - [ 'no builtin', + [qr{could not open file "no-such-file":}] + ], + [ + 'no builtin', '-b no-such-builtin', - [qr{no builtin script .* "no-such-builtin"}] ], - [ 'invalid weight', + [qr{no builtin script .* "no-such-builtin"}] + ], + [ + 'invalid weight', '--builtin=select-only@one', - [qr{invalid weight specification: \@one}] ], - [ 'invalid weight', + [qr{invalid weight specification: \@one}] + ], + [ + 'invalid weight', '-b select-only@-1', - [qr{weight spec.* out of range .*: -1}] ], + [qr{weight spec.* out of range .*: -1}] + ], [ 'too many scripts', '-S ' x 129, [qr{at most 128 SQL scripts}] ], [ 'bad #clients', '-c three', [qr{invalid number of clients: "three"}] ], - [ 'bad #threads', '-j eleven', [qr{invalid number of threads: "eleven"}] + [ + 'bad #threads', '-j eleven', [qr{invalid number of threads: "eleven"}] ], [ 'bad scale', '-i -s two', [qr{invalid scaling factor: "two"}] ], - [ 'invalid #transactions', + [ + 'invalid #transactions', '-t zil', - [qr{invalid number of transactions: "zil"}] ], + [qr{invalid number of transactions: "zil"}] + ], [ 'invalid duration', '-T ten', [qr{invalid duration: "ten"}] ], - [ '-t XOR -T', + [ + '-t XOR -T', '-N -l --aggregate-interval=5 --log-prefix=notused -t 1000 -T 1', - [qr{specify either }] ], - [ '-T XOR -t', + [qr{specify either }] + ], + [ + '-T XOR -t', '-P 1 --progress-timestamp -l --sampling-rate=0.001 -T 10 -t 1000', - [qr{specify either }] ], + [qr{specify either }] + ], [ 'bad variable', '--define foobla', [qr{invalid variable definition}] ], [ 'invalid fillfactor', '-F 1', [qr{invalid fillfactor}] ], [ 'invalid query mode', '-M no-such-mode', [qr{invalid query mode}] ], - [ 'invalid progress', '--progress=0', - [qr{invalid thread progress delay}] ], + [ + 'invalid progress', '--progress=0', + [qr{invalid thread progress delay}] + ], [ 'invalid rate', '--rate=0.0', [qr{invalid rate limit}] ], [ 'invalid latency', '--latency-limit=0.0', [qr{invalid latency limit}] ], - [ 'invalid sampling rate', '--sampling-rate=0', - [qr{invalid sampling rate}] ], - [ 'invalid aggregate interval', '--aggregate-interval=-3', - [qr{invalid .* seconds for}] ], - [ 'weight zero', + [ + 'invalid sampling rate', '--sampling-rate=0', + [qr{invalid sampling rate}] + ], + [ + 'invalid aggregate interval', '--aggregate-interval=-3', + [qr{invalid .* seconds for}] + ], + [ + 'weight zero', '-b se@0 -b si@0 -b tpcb@0', - [qr{weight must not be zero}] ], + [qr{weight must not be zero}] + ], [ 'init vs run', '-i -S', [qr{cannot be used in initialization}] ], [ 'run vs init', '-S -F 90', [qr{cannot be used in benchmarking}] ], [ 'ambiguous builtin', '-b s', [qr{ambiguous}] ], - [ '--progress-timestamp => --progress', '--progress-timestamp', - [qr{allowed only under}] ], - [ '-I without init option', + [ + '--progress-timestamp => --progress', '--progress-timestamp', + [qr{allowed only under}] + ], + [ + '-I without init option', '-I dtg', - [qr{cannot be used in benchmarking mode}] ], - [ 'invalid init step', + [qr{cannot be used in benchmarking mode}] + ], + [ + 'invalid init step', '-i -I dta', - [ qr{unrecognized initialization step}, qr{allowed steps are} ] ], - [ 'bad random seed', + [ qr{unrecognized initialization step}, qr{allowed steps are} ] + ], + [ + 'bad random seed', '--random-seed=one', - [ qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"}, - qr{error while setting random seed from --random-seed option} ] ], + [ + qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"}, + qr{error while setting random seed from --random-seed option} + ] + ], # loging sub-options - [ 'sampling => log', '--sampling-rate=0.01', - [qr{log sampling .* only when}] ], - [ 'sampling XOR aggregate', + [ + 'sampling => log', '--sampling-rate=0.01', + [qr{log sampling .* only when}] + ], + [ + 'sampling XOR aggregate', '-l --sampling-rate=0.1 --aggregate-interval=3', - [qr{sampling .* aggregation .* cannot be used at the same time}] ], - [ 'aggregate => log', '--aggregate-interval=3', - [qr{aggregation .* only when}] ], + [qr{sampling .* aggregation .* cannot be used at the same time}] + ], + [ + 'aggregate => log', '--aggregate-interval=3', + [qr{aggregation .* only when}] + ], [ 'log-prefix => log', '--log-prefix=x', [qr{prefix .* only when}] ], - [ 'duration & aggregation', + [ + 'duration & aggregation', '-l -T 1 --aggregate-interval=3', - [qr{aggr.* not be higher}] ], - [ 'duration % aggregation', + [qr{aggr.* not be higher}] + ], + [ + 'duration % aggregation', '-l -T 5 --aggregate-interval=3', - [qr{multiple}] ],); + [qr{multiple}] + ], +); for my $o (@options) { @@ -143,13 +189,16 @@ for my $o (@options) # Help pgbench( '--help', 0, - [ qr{benchmarking tool for PostgreSQL}, + [ + qr{benchmarking tool for PostgreSQL}, qr{Usage}, qr{Initialization options:}, qr{Common options:}, - qr{Report bugs to} ], + qr{Report bugs to} + ], [qr{^$}], - 'pgbench help'); + 'pgbench help' +); # Version pgbench('-V', 0, [qr{^pgbench .PostgreSQL. }], [qr{^$}], 'pgbench version'); @@ -159,43 +208,67 @@ pgbench( '-b list', 0, [qr{^$}], - [ qr{Available builtin scripts:}, qr{tpcb-like}, - qr{simple-update}, qr{select-only} ], - 'pgbench builtin list'); + [ + qr{Available builtin scripts:}, qr{tpcb-like}, + qr{simple-update}, qr{select-only} + ], + 'pgbench builtin list' +); my @script_tests = ( # name, err, { file => contents } - [ 'missing endif', + [ + 'missing endif', [qr{\\if without matching \\endif}], - { 'if-noendif.sql' => '\if 1' } ], - [ 'missing if on elif', + { 'if-noendif.sql' => '\if 1' } + ], + [ + 'missing if on elif', [qr{\\elif without matching \\if}], - { 'elif-noif.sql' => '\elif 1' } ], - [ 'missing if on else', + { 'elif-noif.sql' => '\elif 1' } + ], + [ + 'missing if on else', [qr{\\else without matching \\if}], - { 'else-noif.sql' => '\else' } ], - [ 'missing if on endif', + { 'else-noif.sql' => '\else' } + ], + [ + 'missing if on endif', [qr{\\endif without matching \\if}], - { 'endif-noif.sql' => '\endif' } ], - [ 'elif after else', + { 'endif-noif.sql' => '\endif' } + ], + [ + 'elif after else', [qr{\\elif after \\else}], - { 'else-elif.sql' => "\\if 1\n\\else\n\\elif 0\n\\endif" } ], - [ 'else after else', + { 'else-elif.sql' => "\\if 1\n\\else\n\\elif 0\n\\endif" } + ], + [ + 'else after else', [qr{\\else after \\else}], - { 'else-else.sql' => "\\if 1\n\\else\n\\else\n\\endif" } ], - [ 'if syntax error', + { 'else-else.sql' => "\\if 1\n\\else\n\\else\n\\endif" } + ], + [ + 'if syntax error', [qr{syntax error in command "if"}], - { 'if-bad.sql' => "\\if\n\\endif\n" } ], - [ 'elif syntax error', + { 'if-bad.sql' => "\\if\n\\endif\n" } + ], + [ + 'elif syntax error', [qr{syntax error in command "elif"}], - { 'elif-bad.sql' => "\\if 0\n\\elif +\n\\endif\n" } ], - [ 'else syntax error', + { 'elif-bad.sql' => "\\if 0\n\\elif +\n\\endif\n" } + ], + [ + 'else syntax error', [qr{unexpected argument in command "else"}], - { 'else-bad.sql' => "\\if 0\n\\else BAD\n\\endif\n" } ], - [ 'endif syntax error', + { 'else-bad.sql' => "\\if 0\n\\else BAD\n\\endif\n" } + ], + [ + 'endif syntax error', [qr{unexpected argument in command "endif"}], - { 'endif-bad.sql' => "\\if 0\n\\endif BAD\n" } ],); + { 'endif-bad.sql' => "\\if 0\n\\endif BAD\n" } + ], +); for my $t (@script_tests) { diff --git a/src/bin/psql/create_help.pl b/src/bin/psql/create_help.pl index cb0e6e8..08ed032 100644 --- a/src/bin/psql/create_help.pl +++ b/src/bin/psql/create_help.pl @@ -149,7 +149,8 @@ foreach my $file (sort readdir DIR) cmddesc => $cmddesc, cmdsynopsis => $cmdsynopsis, params => \@params, - nl_count => $nl_count }; + nl_count => $nl_count + }; $maxlen = ($maxlen >= length $cmdname) ? $maxlen : length $cmdname; } diff --git a/src/bin/scripts/t/010_clusterdb.pl b/src/bin/scripts/t/010_clusterdb.pl index ba093fa..4d1157d 100644 --- a/src/bin/scripts/t/010_clusterdb.pl +++ b/src/bin/scripts/t/010_clusterdb.pl @@ -16,7 +16,8 @@ $node->start; $node->issues_sql_like( ['clusterdb'], qr/statement: CLUSTER;/, - 'SQL CLUSTER run'); + 'SQL CLUSTER run' +); $node->command_fails([ 'clusterdb', '-t', 'nonexistent' ], 'fails with nonexistent table'); @@ -27,7 +28,8 @@ $node->safe_psql('postgres', $node->issues_sql_like( [ 'clusterdb', '-t', 'test1' ], qr/statement: CLUSTER public\.test1;/, - 'cluster specific table'); + 'cluster specific table' +); $node->command_ok([qw(clusterdb --echo --verbose dbname=template1)], 'clusterdb with connection string'); diff --git a/src/bin/scripts/t/011_clusterdb_all.pl b/src/bin/scripts/t/011_clusterdb_all.pl index efd541b..6de273b 100644 --- a/src/bin/scripts/t/011_clusterdb_all.pl +++ b/src/bin/scripts/t/011_clusterdb_all.pl @@ -16,4 +16,5 @@ $ENV{PGDATABASE} = 'postgres'; $node->issues_sql_like( [ 'clusterdb', '-a' ], qr/statement: CLUSTER.*statement: CLUSTER/s, - 'cluster all databases'); + 'cluster all databases' +); diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl index c0f6067..ed7ffa5 100644 --- a/src/bin/scripts/t/020_createdb.pl +++ b/src/bin/scripts/t/020_createdb.pl @@ -16,11 +16,13 @@ $node->start; $node->issues_sql_like( [ 'createdb', 'foobar1' ], qr/statement: CREATE DATABASE foobar1/, - 'SQL CREATE DATABASE run'); + 'SQL CREATE DATABASE run' +); $node->issues_sql_like( [ 'createdb', '-l', 'C', '-E', 'LATIN1', '-T', 'template0', 'foobar2' ], qr/statement: CREATE DATABASE foobar2 ENCODING 'LATIN1'/, - 'create database with encoding'); + 'create database with encoding' +); $node->command_fails([ 'createdb', 'foobar1' ], 'fails if database already exists'); diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl index 916d925..3a57801 100644 --- a/src/bin/scripts/t/040_createuser.pl +++ b/src/bin/scripts/t/040_createuser.pl @@ -16,19 +16,23 @@ $node->start; $node->issues_sql_like( [ 'createuser', 'regress_user1' ], qr/statement: CREATE ROLE regress_user1 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;/, - 'SQL CREATE USER run'); + 'SQL CREATE USER run' +); $node->issues_sql_like( [ 'createuser', '-L', 'regress_role1' ], qr/statement: CREATE ROLE regress_role1 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOLOGIN;/, - 'create a non-login role'); + 'create a non-login role' +); $node->issues_sql_like( [ 'createuser', '-r', 'regress_user2' ], qr/statement: CREATE ROLE regress_user2 NOSUPERUSER NOCREATEDB CREATEROLE INHERIT LOGIN;/, - 'create a CREATEROLE user'); + 'create a CREATEROLE user' +); $node->issues_sql_like( [ 'createuser', '-s', 'regress_user3' ], qr/statement: CREATE ROLE regress_user3 SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;/, - 'create a superuser'); + 'create a superuser' +); $node->command_fails([ 'createuser', 'regress_user1' ], 'fails if role already exists'); diff --git a/src/bin/scripts/t/050_dropdb.pl b/src/bin/scripts/t/050_dropdb.pl index 25aa54a..2863420 100644 --- a/src/bin/scripts/t/050_dropdb.pl +++ b/src/bin/scripts/t/050_dropdb.pl @@ -17,7 +17,8 @@ $node->safe_psql('postgres', 'CREATE DATABASE foobar1'); $node->issues_sql_like( [ 'dropdb', 'foobar1' ], qr/statement: DROP DATABASE foobar1/, - 'SQL DROP DATABASE run'); + 'SQL DROP DATABASE run' +); $node->command_fails([ 'dropdb', 'nonexistent' ], 'fails with nonexistent database'); diff --git a/src/bin/scripts/t/070_dropuser.pl b/src/bin/scripts/t/070_dropuser.pl index 2e858c5..f6caa9e 100644 --- a/src/bin/scripts/t/070_dropuser.pl +++ b/src/bin/scripts/t/070_dropuser.pl @@ -17,7 +17,8 @@ $node->safe_psql('postgres', 'CREATE ROLE regress_foobar1'); $node->issues_sql_like( [ 'dropuser', 'regress_foobar1' ], qr/statement: DROP ROLE regress_foobar1/, - 'SQL DROP ROLE run'); + 'SQL DROP ROLE run' +); $node->command_fails([ 'dropuser', 'regress_nonexistent' ], 'fails with nonexistent user'); diff --git a/src/bin/scripts/t/090_reindexdb.pl b/src/bin/scripts/t/090_reindexdb.pl index e57a5e2..6412a27 100644 --- a/src/bin/scripts/t/090_reindexdb.pl +++ b/src/bin/scripts/t/090_reindexdb.pl @@ -18,36 +18,44 @@ $ENV{PGOPTIONS} = '--client-min-messages=WARNING'; $node->issues_sql_like( [ 'reindexdb', 'postgres' ], qr/statement: REINDEX DATABASE postgres;/, - 'SQL REINDEX run'); + 'SQL REINDEX run' +); $node->safe_psql('postgres', 'CREATE TABLE test1 (a int); CREATE INDEX test1x ON test1 (a);'); $node->issues_sql_like( [ 'reindexdb', '-t', 'test1', 'postgres' ], qr/statement: REINDEX TABLE public\.test1;/, - 'reindex specific table'); + 'reindex specific table' +); $node->issues_sql_like( [ 'reindexdb', '-i', 'test1x', 'postgres' ], qr/statement: REINDEX INDEX public\.test1x;/, - 'reindex specific index'); + 'reindex specific index' +); $node->issues_sql_like( [ 'reindexdb', '-S', 'pg_catalog', 'postgres' ], qr/statement: REINDEX SCHEMA pg_catalog;/, - 'reindex specific schema'); + 'reindex specific schema' +); $node->issues_sql_like( [ 'reindexdb', '-s', 'postgres' ], qr/statement: REINDEX SYSTEM postgres;/, - 'reindex system tables'); + 'reindex system tables' +); $node->issues_sql_like( [ 'reindexdb', '-v', '-t', 'test1', 'postgres' ], qr/statement: REINDEX \(VERBOSE\) TABLE public\.test1;/, - 'reindex with verbose output'); + 'reindex with verbose output' +); $node->command_ok([qw(reindexdb --echo --table=pg_am dbname=template1)], 'reindexdb table with connection string'); $node->command_ok( [qw(reindexdb --echo dbname=template1)], - 'reindexdb database with connection string'); + 'reindexdb database with connection string' +); $node->command_ok( [qw(reindexdb --echo --system dbname=template1)], - 'reindexdb system with connection string'); + 'reindexdb system with connection string' +); diff --git a/src/bin/scripts/t/091_reindexdb_all.pl b/src/bin/scripts/t/091_reindexdb_all.pl index 8e60414..aae38cd 100644 --- a/src/bin/scripts/t/091_reindexdb_all.pl +++ b/src/bin/scripts/t/091_reindexdb_all.pl @@ -13,4 +13,5 @@ $ENV{PGOPTIONS} = '--client-min-messages=WARNING'; $node->issues_sql_like( [ 'reindexdb', '-a' ], qr/statement: REINDEX.*statement: REINDEX/s, - 'reindex all databases'); + 'reindex all databases' +); diff --git a/src/bin/scripts/t/100_vacuumdb.pl b/src/bin/scripts/t/100_vacuumdb.pl index 4c477a2..bae1d75 100644 --- a/src/bin/scripts/t/100_vacuumdb.pl +++ b/src/bin/scripts/t/100_vacuumdb.pl @@ -16,34 +16,41 @@ $node->start; $node->issues_sql_like( [ 'vacuumdb', 'postgres' ], qr/statement: VACUUM;/, - 'SQL VACUUM run'); + 'SQL VACUUM run' +); $node->issues_sql_like( [ 'vacuumdb', '-f', 'postgres' ], qr/statement: VACUUM \(FULL\);/, - 'vacuumdb -f'); + 'vacuumdb -f' +); $node->issues_sql_like( [ 'vacuumdb', '-F', 'postgres' ], qr/statement: VACUUM \(FREEZE\);/, - 'vacuumdb -F'); + 'vacuumdb -F' +); $node->issues_sql_like( [ 'vacuumdb', '-zj2', 'postgres' ], qr/statement: VACUUM \(ANALYZE\) pg_catalog\./, - 'vacuumdb -zj2'); + 'vacuumdb -zj2' +); $node->issues_sql_like( [ 'vacuumdb', '-Z', 'postgres' ], qr/statement: ANALYZE;/, - 'vacuumdb -Z'); + 'vacuumdb -Z' +); $node->command_ok([qw(vacuumdb -Z --table=pg_am dbname=template1)], 'vacuumdb with connection string'); $node->command_fails( [qw(vacuumdb -Zt pg_am;ABORT postgres)], - 'trailing command in "-t", without COLUMNS'); + 'trailing command in "-t", without COLUMNS' +); # Unwanted; better if it failed. $node->command_ok( [qw(vacuumdb -Zt pg_am(amname);ABORT postgres)], - 'trailing command in "-t", with COLUMNS'); + 'trailing command in "-t", with COLUMNS' +); $node->safe_psql( 'postgres', q| @@ -54,9 +61,11 @@ $node->safe_psql( CREATE TABLE funcidx (x int); INSERT INTO funcidx VALUES (0),(1),(2),(3); CREATE INDEX i0 ON funcidx ((f1(x))); -|); +| +); $node->command_ok([qw|vacuumdb -Z --table="need""q(uot"(")x") postgres|], 'column list'); $node->command_fails( [qw|vacuumdb -Zt funcidx postgres|], - 'unqualifed name via functional index'); + 'unqualifed name via functional index' +); diff --git a/src/bin/scripts/t/101_vacuumdb_all.pl b/src/bin/scripts/t/101_vacuumdb_all.pl index 4321258..d44dcd6 100644 --- a/src/bin/scripts/t/101_vacuumdb_all.pl +++ b/src/bin/scripts/t/101_vacuumdb_all.pl @@ -11,4 +11,5 @@ $node->start; $node->issues_sql_like( [ 'vacuumdb', '-a' ], qr/statement: VACUUM.*statement: VACUUM/s, - 'vacuum all databases'); + 'vacuum all databases' +); diff --git a/src/bin/scripts/t/102_vacuumdb_stages.pl b/src/bin/scripts/t/102_vacuumdb_stages.pl index 3929441..5927e3f 100644 --- a/src/bin/scripts/t/102_vacuumdb_stages.pl +++ b/src/bin/scripts/t/102_vacuumdb_stages.pl @@ -16,7 +16,8 @@ $node->issues_sql_like( .*statement:\ ANALYZE.* .*statement:\ RESET\ default_statistics_target; .*statement:\ ANALYZE/sx, - 'analyze three times'); + 'analyze three times' +); $node->issues_sql_like( [ 'vacuumdb', '--analyze-in-stages', '--all' ], @@ -32,4 +33,5 @@ $node->issues_sql_like( .*statement:\ ANALYZE.* .*statement:\ RESET\ default_statistics_target; .*statement:\ ANALYZE/sx, - 'analyze more than one database in stages'); + 'analyze more than one database in stages' +); diff --git a/src/bin/scripts/t/200_connstr.pl b/src/bin/scripts/t/200_connstr.pl index a3aeee7..ab6d0d1 100644 --- a/src/bin/scripts/t/200_connstr.pl +++ b/src/bin/scripts/t/200_connstr.pl @@ -33,9 +33,11 @@ foreach my $dbname ($dbname1, $dbname2, $dbname3, $dbname4, 'CamelCase') $node->command_ok( [qw(vacuumdb --all --echo --analyze-only)], - 'vacuumdb --all with unusual database names'); + 'vacuumdb --all with unusual database names' +); $node->command_ok([qw(reindexdb --all --echo)], 'reindexdb --all with unusual database names'); $node->command_ok( [qw(clusterdb --all --echo --verbose)], - 'clusterdb --all with unusual database names'); + 'clusterdb --all with unusual database names' +); diff --git a/src/interfaces/ecpg/preproc/check_rules.pl b/src/interfaces/ecpg/preproc/check_rules.pl index 6c8b004..ebd2f2d 100644 --- a/src/interfaces/ecpg/preproc/check_rules.pl +++ b/src/interfaces/ecpg/preproc/check_rules.pl @@ -43,7 +43,8 @@ my %replace_line = ( => 'CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause', 'PrepareStmtPREPAREnameprep_type_clauseASPreparableStmt' => - 'PREPARE prepared_name prep_type_clause AS PreparableStmt'); + 'PREPARE prepared_name prep_type_clause AS PreparableStmt' +); my $block = ''; my $yaccmode = 0; diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl index 983c3a3..047d00e 100644 --- a/src/interfaces/ecpg/preproc/parse.pl +++ b/src/interfaces/ecpg/preproc/parse.pl @@ -38,7 +38,8 @@ my %replace_token = ( 'FCONST' => 'ecpg_fconst', 'Sconst' => 'ecpg_sconst', 'IDENT' => 'ecpg_ident', - 'PARAM' => 'ecpg_param',); + 'PARAM' => 'ecpg_param', +); # or in the block my %replace_string = ( @@ -51,7 +52,8 @@ my %replace_string = ( 'EQUALS_GREATER' => '=>', 'LESS_EQUALS' => '<=', 'GREATER_EQUALS' => '>=', - 'NOT_EQUALS' => '<>',); + 'NOT_EQUALS' => '<>', +); # specific replace_types for specific non-terminals - never include the ':' # ECPG-only replace_types are defined in ecpg-replace_types @@ -67,7 +69,8 @@ my %replace_types = ( 'ColId' => 'ignore', 'type_function_name' => 'ignore', 'ColLabel' => 'ignore', - 'Sconst' => 'ignore',); + 'Sconst' => 'ignore', +); # these replace_line commands excise certain keywords from the core keyword # lists. Be sure to account for these in ColLabel and related productions. @@ -105,7 +108,8 @@ my %replace_line = ( => 'CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause', 'PrepareStmtPREPAREnameprep_type_clauseASPreparableStmt' => 'PREPARE prepared_name prep_type_clause AS PreparableStmt', - 'var_nameColId' => 'ECPGColId',); + 'var_nameColId' => 'ECPGColId', +); preload_addons(); @@ -234,7 +238,8 @@ sub main for ( my $fieldIndexer = 0; $fieldIndexer < scalar(@arr); - $fieldIndexer++) + $fieldIndexer++ + ) { if ($arr[$fieldIndexer] eq '*/' && $comment) { @@ -383,10 +388,12 @@ sub main && length($arr[$fieldIndexer]) && $infield) { - if ($arr[$fieldIndexer] ne 'Op' + if ( + $arr[$fieldIndexer] ne 'Op' && ( $tokens{ $arr[$fieldIndexer] } > 0 || $arr[$fieldIndexer] =~ /'.+'/) - || $stmt_mode == 1) + || $stmt_mode == 1 + ) { my $S; if (exists $replace_string{ $arr[$fieldIndexer] }) diff --git a/src/pl/plperl/plperl_opmask.pl b/src/pl/plperl/plperl_opmask.pl index e4e64b8..503be79 100644 --- a/src/pl/plperl/plperl_opmask.pl +++ b/src/pl/plperl/plperl_opmask.pl @@ -43,7 +43,8 @@ my @allowed_ops = ( # used it. Even then it's unlikely to be seen because it's typically # generated by compiler plugins that operate after PL_op_mask checks. # But we err on the side of caution and disable it - qw[!custom],); + qw[!custom], +); printf $fh " /* ALLOWED: @allowed_ops */ \\\n"; diff --git a/src/pl/plperl/text2macro.pl b/src/pl/plperl/text2macro.pl index 27c6ef7..93a2e71 100644 --- a/src/pl/plperl/text2macro.pl +++ b/src/pl/plperl/text2macro.pl @@ -32,7 +32,8 @@ GetOptions( 'prefix=s' => \my $opt_prefix, 'name=s' => \my $opt_name, 'strip=s' => \my $opt_strip, - 'selftest!' => sub { exit selftest() },) or exit 1; + 'selftest!' => sub { exit selftest() }, +) or exit 1; die "No text files specified" unless @ARGV; diff --git a/src/test/authentication/t/002_saslprep.pl b/src/test/authentication/t/002_saslprep.pl index e09273e..bef6705 100644 --- a/src/test/authentication/t/002_saslprep.pl +++ b/src/test/authentication/t/002_saslprep.pl @@ -76,7 +76,8 @@ CREATE ROLE saslpreptest4a_role LOGIN PASSWORD 'a'; CREATE ROLE saslpreptest4b_role LOGIN PASSWORD E'\\xc2\\xaa'; CREATE ROLE saslpreptest6_role LOGIN PASSWORD E'foo\\x07bar'; CREATE ROLE saslpreptest7_role LOGIN PASSWORD E'foo\\u0627\\u0031bar'; -"); +" +); # Require password from now on. reset_pg_hba($node, 'scram-sha-256'); diff --git a/src/test/kerberos/t/001_auth.pl b/src/test/kerberos/t/001_auth.pl index ba90231..b16cd07 100644 --- a/src/test/kerberos/t/001_auth.pl +++ b/src/test/kerberos/t/001_auth.pl @@ -81,12 +81,14 @@ default_realm = $realm [realms] $realm = { kdc = localhost:$kdc_port -}!); +}! +); append_to_file( $kdc_conf, qq![kdcdefaults] -!); +! +); # For new-enough versions of krb5, use the _listen settings rather # than the _ports settings so that we can bind to localhost only. @@ -96,7 +98,8 @@ if ($krb5_version >= 1.15) $kdc_conf, qq!kdc_listen = localhost:$kdc_port kdc_tcp_listen = localhost:$kdc_port -!); +! + ); } else { @@ -104,7 +107,8 @@ else $kdc_conf, qq!kdc_ports = $kdc_port kdc_tcp_ports = $kdc_port -!); +! + ); } append_to_file( $kdc_conf, @@ -115,7 +119,8 @@ $realm = { admin_keytab = FILE:$kdc_datadir/kadm5.keytab acl_file = $kdc_datadir/kadm5.acl key_stash_file = $kdc_datadir/_k5.$realm -}!); +}! +); mkdir $kdc_datadir or die; @@ -161,7 +166,9 @@ sub test_access 'SELECT 1', extra_params => [ '-d', $node->connstr('postgres') . ' host=localhost', - '-U', $role ]); + '-U', $role + ] + ); is($res, $expected_res, $test_name); } diff --git a/src/test/ldap/t/001_auth.pl b/src/test/ldap/t/001_auth.pl index 9ade9a2..f91d7ce 100644 --- a/src/test/ldap/t/001_auth.pl +++ b/src/test/ldap/t/001_auth.pl @@ -82,13 +82,15 @@ TLSCertificateKeyFile $slapd_certs/server.key suffix "dc=example,dc=net" rootdn "$ldap_rootdn" -rootpw $ldap_rootpw}); +rootpw $ldap_rootpw} +); # don't bother to check the server's cert (though perhaps we should) append_to_file( $ldap_conf, qq{TLS_REQCERT never -}); +} +); mkdir $ldap_datadir or die; mkdir $slapd_certs or die; diff --git a/src/test/modules/brin/t/01_workitems.pl b/src/test/modules/brin/t/01_workitems.pl index 534ab63..a20eb4b 100644 --- a/src/test/modules/brin/t/01_workitems.pl +++ b/src/test/modules/brin/t/01_workitems.pl @@ -32,7 +32,8 @@ $node->safe_psql('postgres', $node->poll_query_until( 'postgres', "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)", - 't'); + 't' +); $count = $node->safe_psql('postgres', "select count(*) > 1 from brin_page_items(get_raw_page('brin_wi_idx', 2), 'brin_wi_idx'::regclass)" diff --git a/src/test/modules/commit_ts/t/002_standby.pl b/src/test/modules/commit_ts/t/002_standby.pl index f376b59..73d1abf 100644 --- a/src/test/modules/commit_ts/t/002_standby.pl +++ b/src/test/modules/commit_ts/t/002_standby.pl @@ -15,7 +15,8 @@ $master->append_conf( 'postgresql.conf', qq{ track_commit_timestamp = on max_wal_senders = 5 - }); + } +); $master->start; $master->backup($bkplabel); @@ -60,4 +61,5 @@ is($standby_ts_stdout, '', like( $standby_ts_stderr, qr/could not get commit timestamp data/, - 'expected error when master turned feature off'); + 'expected error when master turned feature off' +); diff --git a/src/test/modules/commit_ts/t/003_standby_2.pl b/src/test/modules/commit_ts/t/003_standby_2.pl index 9165d50..5033116 100644 --- a/src/test/modules/commit_ts/t/003_standby_2.pl +++ b/src/test/modules/commit_ts/t/003_standby_2.pl @@ -14,7 +14,8 @@ $master->append_conf( 'postgresql.conf', qq{ track_commit_timestamp = on max_wal_senders = 5 - }); + } +); $master->start; $master->backup($bkplabel); @@ -47,7 +48,8 @@ is($standby_ts_stdout, '', "standby does not return a value after restart"); like( $standby_ts_stderr, qr/could not get commit timestamp data/, - 'expected err msg after restart'); + 'expected err msg after restart' +); $master->append_conf('postgresql.conf', 'track_commit_timestamp = on'); $master->restart; diff --git a/src/test/modules/commit_ts/t/004_restart.pl b/src/test/modules/commit_ts/t/004_restart.pl index daf42d3..658dbc8 100644 --- a/src/test/modules/commit_ts/t/004_restart.pl +++ b/src/test/modules/commit_ts/t/004_restart.pl @@ -18,7 +18,8 @@ is($ret, 3, 'getting ts of InvalidTransactionId reports error'); like( $stderr, qr/cannot retrieve commit timestamp for transaction/, - 'expected error from InvalidTransactionId'); + 'expected error from InvalidTransactionId' +); ($ret, $stdout, $stderr) = $node_master->psql('postgres', qq[SELECT pg_xact_commit_timestamp('1');]); @@ -33,10 +34,13 @@ is($stdout, '', 'timestamp of FrozenTransactionId is null'); # Since FirstNormalTransactionId will've occurred during initdb, long before we # enabled commit timestamps, it'll be null since we have no cts data for it but # cts are enabled. -is( $node_master->safe_psql( - 'postgres', qq[SELECT pg_xact_commit_timestamp('3');]), +is( + $node_master->safe_psql( + 'postgres', qq[SELECT pg_xact_commit_timestamp('3');] + ), '', - 'committs for FirstNormalTransactionId is null'); + 'committs for FirstNormalTransactionId is null' +); $node_master->safe_psql('postgres', qq[CREATE TABLE committs_test(x integer, y timestamp with time zone);]); @@ -47,7 +51,8 @@ my $xid = $node_master->safe_psql( INSERT INTO committs_test(x, y) VALUES (1, current_timestamp); SELECT txid_current(); COMMIT; -]); +] +); my $before_restart_ts = $node_master->safe_psql('postgres', qq[SELECT pg_xact_commit_timestamp('$xid');]); @@ -83,7 +88,8 @@ is($ret, 3, 'no commit timestamp from enable tx when cts disabled'); like( $stderr, qr/could not get commit timestamp data/, - 'expected error from enabled tx when committs disabled'); + 'expected error from enabled tx when committs disabled' +); # Do a tx while cts disabled my $xid_disabled = $node_master->safe_psql( @@ -92,7 +98,8 @@ my $xid_disabled = $node_master->safe_psql( INSERT INTO committs_test(x, y) VALUES (2, current_timestamp); SELECT txid_current(); COMMIT; -]); +] +); # Should be inaccessible ($ret, $stdout, $stderr) = $node_master->psql('postgres', @@ -101,7 +108,8 @@ is($ret, 3, 'no commit timestamp when disabled'); like( $stderr, qr/could not get commit timestamp data/, - 'expected error from disabled tx when committs disabled'); + 'expected error from disabled tx when committs disabled' +); # Re-enable, restart and ensure we can still get the old timestamps $node_master->append_conf('postgresql.conf', 'track_commit_timestamp = on'); diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index 10716ab..dc8a8b9 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -43,12 +43,16 @@ my %pgdump_runs = ( dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/binary_upgrade.sql", '--schema-only', - '--binary-upgrade', '--dbname=postgres', ], }, + '--binary-upgrade', '--dbname=postgres', + ], + }, clean => { dump_cmd => [ 'pg_dump', "--file=$tempdir/clean.sql", '-c', '--no-sync', - '--dbname=postgres', ], }, + '--dbname=postgres', + ], + }, clean_if_exists => { dump_cmd => [ 'pg_dump', @@ -57,7 +61,9 @@ my %pgdump_runs = ( '-c', '--if-exists', '--encoding=UTF8', # no-op, just tests that option is accepted - 'postgres', ], }, + 'postgres', + ], + }, createdb => { dump_cmd => [ 'pg_dump', @@ -65,7 +71,9 @@ my %pgdump_runs = ( "--file=$tempdir/createdb.sql", '-C', '-R', # no-op, just for testing - 'postgres', ], }, + 'postgres', + ], + }, data_only => { dump_cmd => [ 'pg_dump', @@ -73,7 +81,9 @@ my %pgdump_runs = ( "--file=$tempdir/data_only.sql", '-a', '-v', # no-op, just make sure it works - 'postgres', ], }, + 'postgres', + ], + }, defaults => { dump_cmd => [ 'pg_dump', '-f', "$tempdir/defaults.sql", 'postgres', ], }, @@ -81,70 +91,97 @@ my %pgdump_runs = ( test_key => 'defaults', dump_cmd => [ 'pg_dump', '--no-sync', '-Fc', '-Z6', - "--file=$tempdir/defaults_custom_format.dump", 'postgres', ], + "--file=$tempdir/defaults_custom_format.dump", 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/defaults_custom_format.sql", - "$tempdir/defaults_custom_format.dump", ], }, + "$tempdir/defaults_custom_format.dump", + ], + }, defaults_dir_format => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '--no-sync', '-Fd', - "--file=$tempdir/defaults_dir_format", 'postgres', ], + "--file=$tempdir/defaults_dir_format", 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/defaults_dir_format.sql", - "$tempdir/defaults_dir_format", ], }, + "$tempdir/defaults_dir_format", + ], + }, defaults_parallel => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '--no-sync', '-Fd', '-j2', - "--file=$tempdir/defaults_parallel", 'postgres', ], + "--file=$tempdir/defaults_parallel", 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/defaults_parallel.sql", - "$tempdir/defaults_parallel", ], }, + "$tempdir/defaults_parallel", + ], + }, defaults_tar_format => { test_key => 'defaults', dump_cmd => [ 'pg_dump', '--no-sync', '-Ft', - "--file=$tempdir/defaults_tar_format.tar", 'postgres', ], + "--file=$tempdir/defaults_tar_format.tar", 'postgres', + ], restore_cmd => [ 'pg_restore', "--file=$tempdir/defaults_tar_format.sql", - "$tempdir/defaults_tar_format.tar", ], }, + "$tempdir/defaults_tar_format.tar", + ], + }, pg_dumpall_globals => { dump_cmd => [ 'pg_dumpall', '--no-sync', - "--file=$tempdir/pg_dumpall_globals.sql", '-g', ], }, + "--file=$tempdir/pg_dumpall_globals.sql", '-g', + ], + }, no_privs => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/no_privs.sql", '-x', - 'postgres', ], }, + 'postgres', + ], + }, no_owner => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/no_owner.sql", '-O', - 'postgres', ], }, + 'postgres', + ], + }, schema_only => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/schema_only.sql", - '-s', 'postgres', ], }, + '-s', 'postgres', + ], + }, section_pre_data => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/section_pre_data.sql", '--section=pre-data', - 'postgres', ], }, + 'postgres', + ], + }, section_data => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/section_data.sql", '--section=data', - 'postgres', ], }, + 'postgres', + ], + }, section_post_data => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/section_post_data.sql", - '--section=post-data', 'postgres', ], },); + '--section=post-data', 'postgres', + ], + }, +); ############################################################### # Definition of the tests to run. @@ -184,7 +221,8 @@ my %full_runs = ( createdb => 1, defaults => 1, no_privs => 1, - no_owner => 1,); + no_owner => 1, +); my %tests = ( 'ALTER EXTENSION test_pg_dump' => { @@ -196,7 +234,8 @@ my %tests = ( \n\s+\Qcol1 integer NOT NULL,\E \n\s+\Qcol2 integer\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE EXTENSION test_pg_dump' => { create_order => 2, @@ -207,14 +246,17 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, - unlike => { binary_upgrade => 1, }, }, + section_pre_data => 1, + }, + unlike => { binary_upgrade => 1, }, + }, 'CREATE ROLE regress_dump_test_role' => { create_order => 1, create_sql => 'CREATE ROLE regress_dump_test_role;', regexp => qr/^CREATE ROLE regress_dump_test_role;\n/m, - like => { pg_dumpall_globals => 1, }, }, + like => { pg_dumpall_globals => 1, }, + }, 'CREATE SEQUENCE regress_pg_dump_table_col1_seq' => { regexp => qr/^ @@ -226,7 +268,8 @@ my %tests = ( \n\s+\QNO MAXVALUE\E \n\s+\QCACHE 1;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE TABLE regress_pg_dump_table_added' => { create_order => 7, @@ -237,7 +280,8 @@ my %tests = ( \n\s+\Qcol1 integer NOT NULL,\E \n\s+\Qcol2 integer\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE SEQUENCE regress_pg_dump_seq' => { regexp => qr/^ @@ -248,7 +292,8 @@ my %tests = ( \n\s+\QNO MAXVALUE\E \n\s+\QCACHE 1;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'SETVAL SEQUENCE regress_seq_dumpable' => { create_order => 6, @@ -259,7 +304,9 @@ my %tests = ( like => { %full_runs, data_only => 1, - section_data => 1, }, }, + section_data => 1, + }, + }, 'CREATE TABLE regress_pg_dump_table' => { regexp => qr/^ @@ -267,13 +314,15 @@ my %tests = ( \n\s+\Qcol1 integer NOT NULL,\E \n\s+\Qcol2 integer\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE ACCESS METHOD regress_test_am' => { regexp => qr/^ \QCREATE ACCESS METHOD regress_test_am TYPE INDEX HANDLER bthandler;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'COMMENT ON EXTENSION test_pg_dump' => { regexp => qr/^ @@ -283,7 +332,9 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, }, + section_pre_data => 1, + }, + }, 'GRANT SELECT regress_pg_dump_table_added pre-ALTER EXTENSION' => { create_order => 8, @@ -292,7 +343,8 @@ my %tests = ( regexp => qr/^ \QGRANT SELECT ON TABLE public.regress_pg_dump_table_added TO regress_dump_test_role;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'REVOKE SELECT regress_pg_dump_table_added post-ALTER EXTENSION' => { create_order => 10, @@ -304,8 +356,10 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT SELECT ON TABLE regress_pg_dump_table' => { regexp => qr/^ @@ -313,7 +367,8 @@ my %tests = ( \QGRANT SELECT ON TABLE public.regress_pg_dump_table TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT SELECT(col1) ON regress_pg_dump_table' => { regexp => qr/^ @@ -321,7 +376,8 @@ my %tests = ( \QGRANT SELECT(col1) ON TABLE public.regress_pg_dump_table TO PUBLIC;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT SELECT(col2) ON regress_pg_dump_table TO regress_dump_test_role' => { @@ -334,8 +390,10 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON regress_pg_dump_table_col1_seq TO regress_dump_test_role' => { @@ -348,14 +406,17 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, 'GRANT USAGE ON regress_pg_dump_seq TO regress_dump_test_role' => { regexp => qr/^ \QGRANT USAGE ON SEQUENCE public.regress_pg_dump_seq TO regress_dump_test_role;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'REVOKE SELECT(col1) ON regress_pg_dump_table' => { create_order => 3, @@ -367,8 +428,10 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, - unlike => { no_privs => 1, }, }, + section_pre_data => 1, + }, + unlike => { no_privs => 1, }, + }, # Objects included in extension part of a schema created by this extension */ 'CREATE TABLE regress_pg_dump_schema.test_table' => { @@ -377,7 +440,8 @@ my %tests = ( \n\s+\Qcol1 integer,\E \n\s+\Qcol2 integer\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT SELECT ON regress_pg_dump_schema.test_table' => { regexp => qr/^ @@ -385,7 +449,8 @@ my %tests = ( \QGRANT SELECT ON TABLE regress_pg_dump_schema.test_table TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE SEQUENCE regress_pg_dump_schema.test_seq' => { regexp => qr/^ @@ -396,7 +461,8 @@ my %tests = ( \n\s+\QNO MAXVALUE\E \n\s+\QCACHE 1;\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT USAGE ON regress_pg_dump_schema.test_seq' => { regexp => qr/^ @@ -404,14 +470,16 @@ my %tests = ( \QGRANT USAGE ON SEQUENCE regress_pg_dump_schema.test_seq TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE TYPE regress_pg_dump_schema.test_type' => { regexp => qr/^ \QCREATE TYPE regress_pg_dump_schema.test_type AS (\E \n\s+\Qcol1 integer\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT USAGE ON regress_pg_dump_schema.test_type' => { regexp => qr/^ @@ -419,14 +487,16 @@ my %tests = ( \QGRANT ALL ON TYPE regress_pg_dump_schema.test_type TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE FUNCTION regress_pg_dump_schema.test_func' => { regexp => qr/^ \QCREATE FUNCTION regress_pg_dump_schema.test_func() RETURNS integer\E \n\s+\QLANGUAGE sql\E \n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT ALL ON regress_pg_dump_schema.test_func' => { regexp => qr/^ @@ -434,7 +504,8 @@ my %tests = ( \QGRANT ALL ON FUNCTION regress_pg_dump_schema.test_func() TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'CREATE AGGREGATE regress_pg_dump_schema.test_agg' => { regexp => qr/^ @@ -442,7 +513,8 @@ my %tests = ( \n\s+\QSFUNC = int2_sum,\E \n\s+\QSTYPE = bigint\E \n\);\n/xm, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, 'GRANT ALL ON regress_pg_dump_schema.test_agg' => { regexp => qr/^ @@ -450,7 +522,8 @@ my %tests = ( \QGRANT ALL ON FUNCTION regress_pg_dump_schema.test_agg(smallint) TO regress_dump_test_role;\E\n \QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E \n/xms, - like => { binary_upgrade => 1, }, }, + like => { binary_upgrade => 1, }, + }, # Objects not included in extension, part of schema created by extension 'CREATE TABLE regress_pg_dump_schema.external_tab' => { @@ -464,7 +537,10 @@ my %tests = ( like => { %full_runs, schema_only => 1, - section_pre_data => 1, }, },); + section_pre_data => 1, + }, + }, +); ######################################### # Create a PG instance to test actually dumping from @@ -537,7 +613,8 @@ foreach my $test ( { 0; } - } keys %tests) + } keys %tests + ) { if ($tests{$test}->{create_sql}) { @@ -583,16 +660,24 @@ foreach my $run (sort keys %pgdump_runs) if ($tests{$test}->{like}->{$test_key} && !defined($tests{$test}->{unlike}->{$test_key})) { - if (!ok($output_file =~ $tests{$test}->{regexp}, - "$run: should dump $test")) + if ( + !ok( + $output_file =~ $tests{$test}->{regexp}, + "$run: should dump $test" + ) + ) { diag("Review $run results in $tempdir"); } } else { - if (!ok($output_file !~ $tests{$test}->{regexp}, - "$run: should not dump $test")) + if ( + !ok( + $output_file !~ $tests{$test}->{regexp}, + "$run: should not dump $test" + ) + ) { diag("Review $run results in $tempdir"); } diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 3b06e78..44822e2 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -155,7 +155,8 @@ sub new _host => $pghost, _basedir => "$TestLib::tmp_check/t_${testname}_${name}_data", _name => $name, - _logfile => "$TestLib::log_path/${testname}_${name}.log" }; + _logfile => "$TestLib::log_path/${testname}_${name}.log" + }; bless $self, $class; mkdir $self->{_basedir} @@ -598,7 +599,8 @@ sub _backup_fs filterfn => sub { my $src = shift; return ($src ne 'log' and $src ne 'postmaster.pid'); - }); + } + ); if ($hot) { @@ -669,7 +671,8 @@ sub init_from_backup 'postgresql.conf', qq( port = $port -)); +) + ); $self->enable_streaming($root_node) if $params{has_streaming}; $self->enable_restoring($root_node) if $params{has_restoring}; } @@ -801,7 +804,8 @@ sub enable_streaming 'recovery.conf', qq( primary_conninfo='$root_connstr application_name=$name' standby_mode=on -)); +) + ); } # Internal routine to enable archive recovery command on a standby node @@ -829,7 +833,8 @@ sub enable_restoring 'recovery.conf', qq( restore_command = '$copy_command' standby_mode = on -)); +) + ); } # Internal routine to enable archiving @@ -858,7 +863,8 @@ sub enable_archiving 'postgresql.conf', qq( archive_mode = on archive_command = '$copy_command' -)); +) + ); } # Internal method @@ -1056,7 +1062,8 @@ sub safe_psql stdout => \$stdout, stderr => \$stderr, on_error_die => 1, - on_error_stop => 1); + on_error_stop => 1 + ); # psql can emit stderr from NOTICEs etc if ($stderr ne "") @@ -1471,7 +1478,8 @@ sub lsn 'flush' => 'pg_current_wal_flush_lsn()', 'write' => 'pg_current_wal_lsn()', 'receive' => 'pg_last_wal_receive_lsn()', - 'replay' => 'pg_last_wal_replay_lsn()'); + 'replay' => 'pg_last_wal_replay_lsn()' + ); $mode = '