Commit 3be0a62f authored by Noah Misch's avatar Noah Misch

Finish pgindent run for 9.6: Perl files.

parent b098abf9
......@@ -16,7 +16,7 @@ sub test_index_replay
# Wait for standby to catch up
my $applname = $node_standby->name;
my $caughtup_query =
"SELECT pg_current_xlog_location() <= write_location FROM pg_stat_replication WHERE application_name = '$applname';";
"SELECT pg_current_xlog_location() <= write_location FROM pg_stat_replication WHERE application_name = '$applname';";
$node_master->poll_query_until('postgres', $caughtup_query)
or die "Timed out while waiting for standby 1 to catch up";
......@@ -56,20 +56,25 @@ $node_standby->start;
# Create some bloom index on master
$node_master->psql("postgres", "CREATE EXTENSION bloom;");
$node_master->psql("postgres", "CREATE TABLE tst (i int4, t text);");
$node_master->psql("postgres", "INSERT INTO tst SELECT i%10, substr(md5(i::text), 1, 1) FROM generate_series(1,100000) i;");
$node_master->psql("postgres", "CREATE INDEX bloomidx ON tst USING bloom (i, t) WITH (col1 = 3);");
$node_master->psql("postgres",
"INSERT INTO tst SELECT i%10, substr(md5(i::text), 1, 1) FROM generate_series(1,100000) i;"
);
$node_master->psql("postgres",
"CREATE INDEX bloomidx ON tst USING bloom (i, t) WITH (col1 = 3);");
# Test that queries give same result
test_index_replay('initial');
# Run 10 cycles of table modification. Run test queries after each modification.
for my $i (1..10)
for my $i (1 .. 10)
{
$node_master->psql("postgres", "DELETE FROM tst WHERE i = $i;");
test_index_replay("delete $i");
$node_master->psql("postgres", "VACUUM tst;");
test_index_replay("vacuum $i");
my ($start, $end) = (100001 + ($i - 1) * 10000, 100000 + $i * 10000);
$node_master->psql("postgres", "INSERT INTO tst SELECT i%10, substr(md5(i::text), 1, 1) FROM generate_series($start,$end) i;");
$node_master->psql("postgres",
"INSERT INTO tst SELECT i%10, substr(md5(i::text), 1, 1) FROM generate_series($start,$end) i;"
);
test_index_replay("insert $i");
}
......@@ -18,7 +18,7 @@ open H, '>', $htmp or die "Could not open $htmp: $!";
open C, '>', $ctmp or die "Could not open $ctmp: $!";
my $autogen =
"/* autogenerated from src/backend/storage/lmgr/lwlocknames.txt, do not edit */\n";
"/* autogenerated from src/backend/storage/lmgr/lwlocknames.txt, do not edit */\n";
print H $autogen;
print H "/* there is deliberately not an #ifndef LWLOCKNAMES_H here */\n\n";
print C $autogen, "\n";
......
......@@ -224,6 +224,7 @@ sub printQ()
{
if (ref($q))
{
# flush open w files so that reading this file gets it all
if (exists($wFiles{$$q}) && $wFiles{$$q} ne '')
{
......
......@@ -54,8 +54,8 @@ while (<FILE>)
|| ( ($code >= 0x879a)
&& ($code <= 0x879c)))
{
printf STDERR
"Warning: duplicate UTF8: UCS=0x%04x SJIS=0x%04x\n", $ucs,
printf STDERR "Warning: duplicate UTF8: UCS=0x%04x SJIS=0x%04x\n",
$ucs,
$code;
next;
}
......
......@@ -114,7 +114,8 @@ SKIP:
mkdir "$tempdir/tblspc1";
$node->safe_psql('postgres',
"CREATE TABLESPACE tblspc1 LOCATION '$shorter_tempdir/tblspc1';");
$node->safe_psql('postgres', "CREATE TABLE test1 (a int) TABLESPACE tblspc1;");
$node->safe_psql('postgres',
"CREATE TABLE test1 (a int) TABLESPACE tblspc1;");
$node->command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup2", '-Ft' ],
'tar format with tablespaces');
ok(-f "$tempdir/tarbackup2/base.tar", 'backup tar was created');
......
......@@ -23,14 +23,22 @@ program_options_handling_ok('pg_dump');
command_exit_is([ 'pg_dump', 'qqq', 'abc' ],
1, 'pg_dump: too many command-line arguments (first is "asd")');
command_exit_is([ 'pg_dump', '-s', '-a' ],
1, 'pg_dump: options -s/--schema-only and -a/--data-only cannot be used together');
command_exit_is([ 'pg_dump', '-c', '-a' ],
1, 'pg_dump: options -c/--clean and -a/--data-only cannot be used together');
command_exit_is([ 'pg_dump', '--inserts', '-o' ],
1, 'pg_dump: options --inserts/--column-inserts and -o/--oids cannot be used together');
command_exit_is(
[ 'pg_dump', '-s', '-a' ],
1,
'pg_dump: options -s/--schema-only and -a/--data-only cannot be used together'
);
command_exit_is(
[ 'pg_dump', '-c', '-a' ],
1,
'pg_dump: options -c/--clean and -a/--data-only cannot be used together');
command_exit_is(
[ 'pg_dump', '--inserts', '-o' ],
1,
'pg_dump: options --inserts/--column-inserts and -o/--oids cannot be used together'
);
command_exit_is([ 'pg_dump', '--if-exists' ],
1, 'pg_dump: option --if-exists requires option -c/--clean');
......
......@@ -43,16 +43,14 @@ my %pgdump_runs = (
'--schema-only',
'--binary-upgrade',
'-d', 'postgres', # alternative way to specify database
],
},
], },
clean => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/clean.sql",
'-c',
'-d', 'postgres', # alternative way to specify database
],
},
], },
clean_if_exists => {
dump_cmd => [
'pg_dump',
......@@ -60,224 +58,130 @@ my %pgdump_runs = (
'-c',
'--if-exists',
'-E', 'UTF8', # no-op, just tests that option is accepted
'postgres',
],
},
'postgres', ], },
column_inserts => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/column_inserts.sql",
'-a',
'--column-inserts',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/column_inserts.sql", '-a',
'--column-inserts', 'postgres', ], },
createdb => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/createdb.sql",
'-C',
'-R', # no-op, just for testing
'postgres',
],
},
'postgres', ], },
data_only => {
dump_cmd => [
'pg_dump',
'-f', "$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',
],
dump_cmd => [ 'pg_dump', '-f', "$tempdir/defaults.sql", 'postgres', ],
},
defaults_custom_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fc',
'-Z6',
'-f', "$tempdir/defaults_custom_format.dump",
'postgres',
],
'pg_dump', '-Fc', '-Z6', '-f',
"$tempdir/defaults_custom_format.dump", 'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_custom_format.sql",
"$tempdir/defaults_custom_format.dump",
],
},
'-f',
"$tempdir/defaults_custom_format.sql",
"$tempdir/defaults_custom_format.dump", ], },
defaults_dir_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fd',
'-f', "$tempdir/defaults_dir_format",
'postgres',
],
'pg_dump', '-Fd', '-f', "$tempdir/defaults_dir_format",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_dir_format.sql",
"$tempdir/defaults_dir_format",
],
},
'-f',
"$tempdir/defaults_dir_format.sql",
"$tempdir/defaults_dir_format", ], },
defaults_parallel => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fd',
'-j2',
'-f', "$tempdir/defaults_parallel",
'postgres',
],
'pg_dump', '-Fd', '-j2', '-f', "$tempdir/defaults_parallel",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_parallel.sql",
"$tempdir/defaults_parallel",
],
'pg_restore', '-f',
"$tempdir/defaults_parallel.sql", "$tempdir/defaults_parallel", ],
},
defaults_tar_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Ft',
'-f', "$tempdir/defaults_tar_format.tar",
'postgres',
],
'pg_dump', '-Ft', '-f', "$tempdir/defaults_tar_format.tar",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_tar_format.sql",
"$tempdir/defaults_tar_format.tar",
],
},
'-f',
"$tempdir/defaults_tar_format.sql",
"$tempdir/defaults_tar_format.tar", ], },
exclude_dump_test_schema => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/exclude_dump_test_schema.sql",
'-N', 'dump_test',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/exclude_dump_test_schema.sql",
'-N', 'dump_test', 'postgres', ], },
exclude_test_table => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/exclude_test_table.sql",
'-T', 'dump_test.test_table',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/exclude_test_table.sql", '-T',
'dump_test.test_table', 'postgres', ], },
exclude_test_table_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/exclude_test_table_data.sql",
'--exclude-table-data=dump_test.test_table',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/exclude_test_table_data.sql",
'--exclude-table-data=dump_test.test_table', 'postgres', ], },
pg_dumpall_globals => {
dump_cmd => [
'pg_dumpall',
'-f', "$tempdir/pg_dumpall_globals.sql",
'-g',
],
},
dump_cmd =>
[ 'pg_dumpall', '-f', "$tempdir/pg_dumpall_globals.sql", '-g', ], },
pg_dumpall_globals_clean => {
dump_cmd => [
'pg_dumpall',
'-f', "$tempdir/pg_dumpall_globals_clean.sql",
'-g',
'-c',
],
},
'pg_dumpall', '-f', "$tempdir/pg_dumpall_globals_clean.sql",
'-g', '-c', ], },
no_privs => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/no_privs.sql",
'-x',
'postgres',
],
},
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/no_privs.sql", '-x', 'postgres', ], },
no_owner => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/no_owner.sql",
'-O',
'postgres',
],
},
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/no_owner.sql", '-O', 'postgres', ], },
only_dump_test_schema => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/only_dump_test_schema.sql",
'-n', 'dump_test',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/only_dump_test_schema.sql",
'-n', 'dump_test', 'postgres', ], },
only_dump_test_table => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/only_dump_test_table.sql",
'-t', 'dump_test.test_table',
'--lock-wait-timeout=1000000',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/only_dump_test_table.sql",
'-t', 'dump_test.test_table', '--lock-wait-timeout=1000000',
'postgres', ], },
role => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/role.sql",
'--role=dump_test',
'--schema=dump_test_second_schema',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/role.sql", '--role=dump_test',
'--schema=dump_test_second_schema', 'postgres', ], },
schema_only => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/schema_only.sql",
'-s',
'postgres',
],
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/schema_only.sql", '-s', 'postgres', ],
},
section_pre_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_pre_data.sql",
'--section=pre-data',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/section_pre_data.sql",
'--section=pre-data', 'postgres', ], },
section_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_data.sql",
'--section=data',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/section_data.sql", '--section=data',
'postgres', ], },
section_post_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_post_data.sql",
'--section=post-data',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/section_post_data.sql",
'--section=post-data', 'postgres', ], },
test_schema_plus_blobs => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/test_schema_plus_blobs.sql",
'-n', 'dump_test',
'-b',
'postgres',
],
},
);
'pg_dump', '-f', "$tempdir/test_schema_plus_blobs.sql",
'-n', 'dump_test', '-b', 'postgres', ], },);
###############################################################
# Definition of the tests to run.
......@@ -338,8 +242,7 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
no_privs => 1,
......@@ -347,9 +250,7 @@ my %tests = (
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_pre_data => 1,
section_data => 1,
},
},
section_data => 1, }, },
'ALTER ROLE dump_test' => {
regexp => qr/^
\QALTER ROLE dump_test WITH \E
......@@ -358,8 +259,7 @@ my %tests = (
/xm,
like => {
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
pg_dumpall_globals_clean => 1, },
unlike => {
binary_upgrade => 1,
clean => 1,
......@@ -376,9 +276,7 @@ my %tests = (
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'ALTER FUNCTION dump_test.pltestlang_call_handler() OWNER TO' => {
regexp => qr/^
\QALTER FUNCTION dump_test.pltestlang_call_handler() \E
......@@ -396,13 +294,10 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO' => {
regexp => qr/^ALTER PROCEDURAL LANGUAGE pltestlang OWNER TO .*;/m,
like => {
......@@ -416,14 +311,11 @@ my %tests = (
exclude_test_table_data => 1,
no_privs => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'ALTER SCHEMA dump_test OWNER TO' => {
regexp => qr/^ALTER SCHEMA dump_test OWNER TO .*;/m,
like => {
......@@ -438,13 +330,10 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'ALTER SCHEMA dump_test_second_schema OWNER TO' => {
regexp => qr/^ALTER SCHEMA dump_test_second_schema OWNER TO .*;/m,
like => {
......@@ -458,14 +347,11 @@ my %tests = (
exclude_test_table_data => 1,
no_privs => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'ALTER TABLE ONLY test_table ADD CONSTRAINT ... PRIMARY KEY' => {
regexp => qr/^
\QALTER TABLE ONLY test_table\E \n^\s+
......@@ -483,15 +369,12 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
section_pre_data => 1,
section_data => 1,
},
},
section_data => 1, }, },
'ALTER TABLE test_table OWNER TO' => {
regexp => qr/^ALTER TABLE test_table OWNER TO .*;/m,
like => {
......@@ -506,13 +389,10 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
},
},
exclude_test_table => 1, }, },
'ALTER TABLE test_table ENABLE ROW LEVEL SECURITY' => {
create_order => 23,
create_sql => 'ALTER TABLE dump_test.test_table
......@@ -530,14 +410,11 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
},
},
exclude_test_table => 1, }, },
'ALTER TABLE test_second_table OWNER TO' => {
regexp => qr/^ALTER TABLE test_second_table OWNER TO .*;/m,
like => {
......@@ -552,13 +429,10 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'ALTER TABLE test_third_table OWNER TO' => {
regexp => qr/^ALTER TABLE test_third_table OWNER TO .*;/m,
like => {
......@@ -572,81 +446,76 @@ my %tests = (
exclude_test_table_data => 1,
no_privs => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
# catch-all for ALTER ... OWNER (except LARGE OBJECTs)
'ALTER ... OWNER commands (except LARGE OBJECTs)' => {
regexp => qr/^ALTER (?!LARGE OBJECT)(.*) OWNER TO .*;/m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
section_data => 1,
},
},
section_data => 1, }, },
# catch-all for ALTER TABLE ...
'ALTER TABLE ... commands' => {
regexp => qr/^ALTER TABLE .*;/m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_data => 1,
},
},
section_data => 1, }, },
# catch-all for ALTER ... OWNER
'ALTER ... OWNER commands' => {
regexp => qr/^ALTER .* OWNER TO .*;/m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
no_owner => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
# 'BLOB load (contents are of test_table)' => {
# create_order => 14,
# create_sql =>
# "\\o '$tempdir/large_object_test.sql'\n"
# . "table dump_test.test_table;\n"
# . "\\o\n"
# . "\\lo_import '$tempdir/large_object_test.sql'\n",
# regexp => qr/^
# \QSELECT pg_catalog.lo_open\E \('\d+',\ \d+\);\n
# \QSELECT pg_catalog.lowrite(0, \E
# \Q'\x310a320a330a340a350a360a370a380a390a');\E\n
# \QSELECT pg_catalog.lo_close(0);\E
# /xm,
# like => {
# clean => 1,
# clean_if_exists => 1,
# createdb => 1,
# defaults => 1,
# exclude_dump_test_schema => 1,
# exclude_test_table => 1,
# exclude_test_table_data => 1,
# no_privs => 1,
# section_data => 1,
# test_schema_plus_blobs => 1,
# },
# unlike => {
# binary_upgrade => 1,
# only_dump_test_schema => 1,
# only_dump_test_table => 1,
# pg_dumpall_globals => 1,
# schema_only => 1,
# section_post_data => 1,
# },
# },
section_post_data => 1, }, },
# 'BLOB load (contents are of test_table)' => {
# create_order => 14,
# create_sql =>
# "\\o '$tempdir/large_object_test.sql'\n"
# . "table dump_test.test_table;\n"
# . "\\o\n"
# . "\\lo_import '$tempdir/large_object_test.sql'\n",
# regexp => qr/^
# \QSELECT pg_catalog.lo_open\E \('\d+',\ \d+\);\n
# \QSELECT pg_catalog.lowrite(0, \E
# \Q'\x310a320a330a340a350a360a370a380a390a');\E\n
# \QSELECT pg_catalog.lo_close(0);\E
# /xm,
# like => {
# clean => 1,
# clean_if_exists => 1,
# createdb => 1,
# defaults => 1,
# exclude_dump_test_schema => 1,
# exclude_test_table => 1,
# exclude_test_table_data => 1,
# no_privs => 1,
# section_data => 1,
# test_schema_plus_blobs => 1,
# },
# unlike => {
# binary_upgrade => 1,
# only_dump_test_schema => 1,
# only_dump_test_table => 1,
# pg_dumpall_globals => 1,
# schema_only => 1,
# section_post_data => 1,
# },
# },
'COMMENT ON DATABASE postgres' => {
regexp => qr/^COMMENT ON DATABASE postgres IS .*;/m,
like => {
......@@ -661,13 +530,10 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'COMMENT ON EXTENSION plpgsql' => {
regexp => qr/^COMMENT ON EXTENSION plpgsql IS .*;/m,
like => {
......@@ -681,14 +547,11 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
binary_upgrade => 1,
only_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'COMMENT ON TABLE dump_test.test_table' => {
create_order => 36,
create_sql => 'COMMENT ON TABLE dump_test.test_table
......@@ -706,13 +569,10 @@ my %tests = (
only_dump_test_schema => 1,
only_dump_test_table => 1,
schema_only => 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,
create_sql => 'COMMENT ON COLUMN dump_test.test_table.col1
......@@ -732,13 +592,10 @@ my %tests = (
only_dump_test_schema => 1,
only_dump_test_table => 1,
schema_only => 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,
create_sql => 'COMMENT ON COLUMN dump_test.composite.f1
......@@ -758,30 +615,25 @@ my %tests = (
no_owner => 1,
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
# catch-all for COMMENTs
'COMMENT commands' => {
regexp => qr/^COMMENT ON /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_data => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'COPY test_table' => {
create_order => 4,
create_sql =>
'INSERT INTO dump_test.test_table (col1) '
create_sql => 'INSERT INTO dump_test.test_table (col1) '
. 'SELECT generate_series FROM generate_series(1,9);',
regexp => qr/^
\QCOPY test_table (col1) FROM stdin;\E
......@@ -798,18 +650,14 @@ my %tests = (
only_dump_test_schema => 1,
only_dump_test_table => 1,
section_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
exclude_test_table_data => 1,
},
},
exclude_test_table_data => 1, }, },
'COPY fk_reference_test_table' => {
create_order => 22,
create_sql =>
'INSERT INTO dump_test.fk_reference_test_table (col1) '
create_sql => 'INSERT INTO dump_test.fk_reference_test_table (col1) '
. 'SELECT generate_series FROM generate_series(1,5);',
regexp => qr/^
\QCOPY fk_reference_test_table (col1) FROM stdin;\E
......@@ -827,13 +675,10 @@ my %tests = (
no_owner => 1,
only_dump_test_schema => 1,
section_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'COPY fk_reference_test_table second' => {
regexp => qr/^
\QCOPY test_table (col1) FROM stdin;\E
......@@ -841,19 +686,14 @@ my %tests = (
\QCOPY fk_reference_test_table (col1) FROM stdin;\E
\n(?:\d\n){5}\\\.\n
/xms,
like => {
data_only => 1,
},
like => { data_only => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
exclude_test_table_data => 1,
},
},
exclude_test_table_data => 1, }, },
'COPY test_second_table' => {
create_order => 7,
create_sql =>
'INSERT INTO dump_test.test_second_table (col1, col2) '
create_sql => 'INSERT INTO dump_test.test_second_table (col1, col2) '
. 'SELECT generate_series, generate_series::text '
. 'FROM generate_series(1,9);',
regexp => qr/^
......@@ -872,13 +712,10 @@ my %tests = (
no_owner => 1,
only_dump_test_schema => 1,
section_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
},
},
only_dump_test_table => 1, }, },
'COPY test_third_table' => {
create_order => 12,
create_sql =>
......@@ -899,21 +736,16 @@ my %tests = (
exclude_test_table_data => 1,
no_privs => 1,
no_owner => 1,
section_data => 1,
},
section_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'INSERT INTO test_table' => {
regexp => qr/^
(?:INSERT\ INTO\ test_table\ \(col1\)\ VALUES\ \(\d\);\n){9}
/xm,
like => {
column_inserts => 1,
},
like => { column_inserts => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -928,16 +760,12 @@ my %tests = (
section_data => 1,
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'INSERT INTO test_second_table' => {
regexp => qr/^
(?:INSERT\ INTO\ test_second_table\ \(col1,\ col2\)
\ VALUES\ \(\d,\ '\d'\);\n){9}/xm,
like => {
column_inserts => 1,
},
like => { column_inserts => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -952,16 +780,12 @@ my %tests = (
section_data => 1,
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'INSERT INTO test_third_table' => {
regexp => qr/^
(?:INSERT\ INTO\ test_third_table\ \(col1\)
\ VALUES\ \(\d\);\n){9}/xm,
like => {
column_inserts => 1,
},
like => { column_inserts => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -976,29 +800,24 @@ my %tests = (
section_data => 1,
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'COPY ... commands' => { # catch-all for COPY
regexp => qr/^COPY /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
binary_upgrade => 1,
column_inserts => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
schema_only => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE ROLE dump_test' => {
create_order => 1,
create_sql => 'CREATE ROLE dump_test;',
regexp => qr/^CREATE ROLE dump_test;/m,
like => {
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
pg_dumpall_globals_clean => 1, },
unlike => {
binary_upgrade => 1,
clean => 1,
......@@ -1015,16 +834,12 @@ my %tests = (
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE DATABASE postgres' => {
regexp => qr/^
\QCREATE DATABASE postgres WITH TEMPLATE = template0 \E
.*;/xm,
like => {
createdb => 1,
},
like => { createdb => 1, },
unlike => {
binary_upgrade => 1,
clean => 1,
......@@ -1042,9 +857,7 @@ my %tests = (
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE EXTENSION ... plpgsql' => {
regexp => qr/^
\QCREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;\E
......@@ -1060,8 +873,7 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
binary_upgrade => 1,
only_dump_test_schema => 1,
......@@ -1069,9 +881,7 @@ my %tests = (
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE AGGREGATE dump_test.newavg' => {
create_order => 25,
create_sql => 'CREATE AGGREGATE dump_test.newavg (
......@@ -1101,16 +911,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE DOMAIN dump_test.us_postal_code' => {
create_order => 29,
create_sql => 'CREATE DOMAIN dump_test.us_postal_code AS TEXT
......@@ -1137,16 +944,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FUNCTION dump_test.pltestlang_call_handler' => {
create_order => 17,
create_sql => 'CREATE FUNCTION dump_test.pltestlang_call_handler()
......@@ -1172,16 +976,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FUNCTION dump_test.trigger_func' => {
create_order => 30,
create_sql => 'CREATE FUNCTION dump_test.trigger_func()
......@@ -1206,16 +1007,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FUNCTION dump_test.event_trigger_func' => {
create_order => 32,
create_sql => 'CREATE FUNCTION dump_test.event_trigger_func()
......@@ -1240,16 +1038,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE EVENT TRIGGER test_event_trigger' => {
create_order => 33,
create_sql => 'CREATE EVENT TRIGGER test_event_trigger
......@@ -1272,17 +1067,14 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_post_data => 1,
},
section_post_data => 1, },
unlike => {
section_pre_data => 1,
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE TRIGGER test_trigger' => {
create_order => 31,
create_sql => 'CREATE TRIGGER test_trigger
......@@ -1307,16 +1099,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE TYPE dump_test.planets AS ENUM' => {
create_order => 37,
create_sql => 'CREATE TYPE dump_test.planets
......@@ -1339,16 +1128,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TYPE dump_test.planets AS ENUM pg_upgrade' => {
regexp => qr/^
\QCREATE TYPE planets AS ENUM (\E
......@@ -1359,9 +1145,7 @@ my %tests = (
\n.*^
\QALTER TYPE dump_test.planets ADD VALUE 'mars';\E
\n/xms,
like => {
binary_upgrade => 1,
},
like => { binary_upgrade => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -1379,9 +1163,7 @@ my %tests = (
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TYPE dump_test.textrange AS RANGE' => {
create_order => 38,
create_sql => 'CREATE TYPE dump_test.textrange
......@@ -1403,16 +1185,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TYPE dump_test.int42' => {
create_order => 39,
create_sql => 'CREATE TYPE dump_test.int42;',
......@@ -1429,16 +1208,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FUNCTION dump_test.int42_in' => {
create_order => 40,
create_sql => 'CREATE FUNCTION dump_test.int42_in(cstring)
......@@ -1462,16 +1238,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FUNCTION dump_test.int42_out' => {
create_order => 41,
create_sql => 'CREATE FUNCTION dump_test.int42_out(dump_test.int42)
......@@ -1495,16 +1268,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TYPE dump_test.int42 populated' => {
create_order => 42,
create_sql => 'CREATE TYPE dump_test.int42 (
......@@ -1536,16 +1306,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TYPE dump_test.composite' => {
create_order => 43,
create_sql => 'CREATE TYPE dump_test.composite AS (
......@@ -1570,16 +1337,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE FOREIGN DATA WRAPPER dummy' => {
create_order => 35,
create_sql => 'CREATE FOREIGN DATA WRAPPER dummy;',
......@@ -1596,17 +1360,14 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE SERVER s1 FOREIGN DATA WRAPPER dummy' => {
create_order => 36,
create_sql => 'CREATE SERVER s1 FOREIGN DATA WRAPPER dummy;',
......@@ -1623,19 +1384,16 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
#######################################
# Currently broken.
# Currently broken.
#######################################
#
# 'CREATE TRANSFORM FOR int' => {
......@@ -1683,8 +1441,7 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
......@@ -1692,9 +1449,7 @@ my %tests = (
pg_dumpall_globals_clean => 1,
section_post_data => 1,
only_dump_test_schema => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE MATERIALIZED VIEW matview' => {
create_order => 20,
create_sql => 'CREATE MATERIALIZED VIEW dump_test.matview (col1) AS
......@@ -1718,16 +1473,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE MATERIALIZED VIEW matview_second' => {
create_order => 21,
create_sql => 'CREATE MATERIALIZED VIEW
......@@ -1752,16 +1504,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE POLICY p1 ON test_table' => {
create_order => 22,
create_sql => 'CREATE POLICY p1 ON dump_test.test_table
......@@ -1784,16 +1533,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE POLICY p2 ON test_table FOR SELECT' => {
create_order => 24,
create_sql => 'CREATE POLICY p2 ON dump_test.test_table
......@@ -1815,16 +1561,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE POLICY p3 ON test_table FOR INSERT' => {
create_order => 25,
create_sql => 'CREATE POLICY p3 ON dump_test.test_table
......@@ -1846,16 +1589,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE POLICY p4 ON test_table FOR UPDATE' => {
create_order => 26,
create_sql => 'CREATE POLICY p4 ON dump_test.test_table FOR UPDATE
......@@ -1877,16 +1617,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE POLICY p5 ON test_table FOR DELETE' => {
create_order => 27,
create_sql => 'CREATE POLICY p5 ON dump_test.test_table
......@@ -1908,16 +1645,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
section_pre_data => 1,
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'CREATE SCHEMA dump_test' => {
create_order => 2,
create_sql => 'CREATE SCHEMA dump_test;',
......@@ -1935,16 +1669,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE SCHEMA dump_test_second_schema' => {
create_order => 9,
create_sql => 'CREATE SCHEMA dump_test_second_schema;',
......@@ -1961,17 +1692,14 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE TABLE test_table' => {
create_order => 3,
create_sql => 'CREATE TABLE dump_test.test_table (
......@@ -1997,16 +1725,13 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TABLE fk_reference_test_table' => {
create_order => 21,
create_sql => 'CREATE TABLE dump_test.fk_reference_test_table (
......@@ -2030,16 +1755,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TABLE test_second_table' => {
create_order => 6,
create_sql => 'CREATE TABLE dump_test.test_second_table (
......@@ -2065,16 +1787,13 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TABLE test_third_table' => {
create_order => 11,
create_sql => 'CREATE TABLE dump_test_second_schema.test_third_table (
......@@ -2097,17 +1816,14 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE SEQUENCE test_table_col1_seq' => {
regexp => qr/^
\QCREATE SEQUENCE test_table_col1_seq\E
......@@ -2131,15 +1847,12 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE SEQUENCE test_third_table_col1_seq' => {
regexp => qr/^
\QCREATE SEQUENCE test_third_table_col1_seq\E
......@@ -2161,17 +1874,14 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
section_post_data => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE UNIQUE INDEX test_third_table_idx ON test_third_table' => {
create_order => 13,
create_sql => 'CREATE UNIQUE INDEX test_third_table_idx
......@@ -2192,209 +1902,112 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_post_data => 1,
},
section_post_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
pg_dumpall_globals_clean => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'CREATE ... commands' => { # catch-all for CREATE
regexp => qr/^CREATE /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
section_data => 1,
},
},
section_data => 1, }, },
'DROP EXTENSION plpgsql' => {
regexp => qr/^DROP EXTENSION plpgsql;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP FUNCTION dump_test.pltestlang_call_handler()' => {
regexp => qr/^DROP FUNCTION dump_test\.pltestlang_call_handler\(\);/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP LANGUAGE pltestlang' => {
regexp => qr/^DROP PROCEDURAL LANGUAGE pltestlang;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP SCHEMA dump_test' => {
regexp => qr/^DROP SCHEMA dump_test;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP SCHEMA dump_test_second_schema' => {
regexp => qr/^DROP SCHEMA dump_test_second_schema;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP TABLE test_table' => {
regexp => qr/^DROP TABLE dump_test\.test_table;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP TABLE fk_reference_test_table' => {
regexp => qr/^DROP TABLE dump_test\.fk_reference_test_table;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP TABLE test_second_table' => {
regexp => qr/^DROP TABLE dump_test\.test_second_table;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP TABLE test_third_table' => {
regexp => qr/^DROP TABLE dump_test_second_schema\.test_third_table;/m,
like => {
clean => 1,
},
unlike => {
clean_if_exists => 1,
},
},
like => { clean => 1, },
unlike => { clean_if_exists => 1, }, },
'DROP EXTENSION IF EXISTS plpgsql' => {
regexp => qr/^DROP EXTENSION IF EXISTS plpgsql;/m,
like => {
clean_if_exists => 1,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 1, }, },
'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,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 1, }, },
'DROP LANGUAGE IF EXISTS pltestlang' => {
regexp => qr/^DROP PROCEDURAL LANGUAGE IF EXISTS pltestlang;/m,
like => {
clean_if_exists => 1,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 1, }, },
'DROP SCHEMA IF EXISTS dump_test' => {
regexp => qr/^DROP SCHEMA IF EXISTS dump_test;/m,
like => {
clean_if_exists => 1,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 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,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 1, }, },
'DROP TABLE IF EXISTS test_table' => {
regexp => qr/^DROP TABLE IF EXISTS dump_test\.test_table;/m,
like => {
clean_if_exists => 1,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 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,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 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,
},
unlike => {
clean => 1,
},
},
like => { clean_if_exists => 1, },
unlike => { clean => 1, }, },
'DROP ROLE dump_test' => {
regexp => qr/^
\QDROP ROLE dump_test;\E
/xm,
like => {
pg_dumpall_globals_clean => 1,
},
like => { pg_dumpall_globals_clean => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
},
},
clean_if_exists => 1, }, },
'DROP ROLE pg_' => {
regexp => qr/^
\QDROP ROLE pg_\E.*;
/xm,
like => {
},
like => {},
unlike => {
clean => 1,
clean_if_exists => 1,
pg_dumpall_globals_clean => 1,
},
},
pg_dumpall_globals_clean => 1, }, },
'DROP ... commands' => { # catch-all for DROP
regexp => qr/^DROP /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
binary_upgrade => 1,
column_inserts => 1,
......@@ -2409,9 +2022,7 @@ my %tests = (
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
schema_only => 1,
},
},
schema_only => 1, }, },
'GRANT USAGE ON SCHEMA dump_test_second_schema' => {
create_order => 10,
create_sql => 'GRANT USAGE ON SCHEMA dump_test_second_schema
......@@ -2430,15 +2041,12 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'GRANT SELECT ON TABLE test_table' => {
create_order => 5,
create_sql => 'GRANT SELECT ON TABLE dump_test.test_table
......@@ -2456,14 +2064,11 @@ my %tests = (
only_dump_test_table => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
pg_dumpall_globals => 1,
},
},
pg_dumpall_globals => 1, }, },
'GRANT SELECT ON TABLE test_third_table' => {
create_order => 19,
create_sql => 'GRANT SELECT ON
......@@ -2481,15 +2086,12 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'GRANT ALL ON SEQUENCE test_third_table_col1_seq' => {
create_order => 28,
create_sql => 'GRANT ALL ON SEQUENCE
......@@ -2509,18 +2111,16 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'GRANT INSERT(col1) ON TABLE test_second_table' => {
create_order => 8,
create_sql => 'GRANT INSERT (col1) ON TABLE dump_test.test_second_table
create_sql =>
'GRANT INSERT (col1) ON TABLE dump_test.test_second_table
TO dump_test;',
regexp => qr/^
\QGRANT INSERT(col1) ON TABLE test_second_table TO dump_test;\E
......@@ -2537,14 +2137,11 @@ my %tests = (
only_dump_test_schema => 1,
schema_only => 1,
section_pre_data => 1,
test_schema_plus_blobs => 1,
},
test_schema_plus_blobs => 1, },
unlike => {
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
},
},
pg_dumpall_globals => 1, }, },
'GRANT EXECUTE ON FUNCTION pg_sleep() TO dump_test' => {
create_order => 16,
create_sql => 'GRANT EXECUTE ON FUNCTION pg_sleep(float8)
......@@ -2563,14 +2160,11 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'GRANT SELECT (proname ...) ON TABLE pg_proc TO public' => {
create_order => 46,
create_sql => 'GRANT SELECT (
......@@ -2649,24 +2243,19 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'GRANT commands' => { # catch-all for GRANT commands
regexp => qr/^GRANT /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
no_privs => 1,
section_data => 1,
},
},
section_data => 1, }, },
'REFRESH MATERIALIZED VIEW matview' => {
regexp => qr/^REFRESH MATERIALIZED VIEW matview;/m,
like => {
......@@ -2680,17 +2269,14 @@ my %tests = (
no_owner => 1,
only_dump_test_schema => 1,
test_schema_plus_blobs => 1,
section_post_data => 1,
},
section_post_data => 1, },
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
schema_only => 1,
section_pre_data => 1,
},
},
section_pre_data => 1, }, },
'REFRESH MATERIALIZED VIEW matview_second' => {
regexp => qr/^
\QREFRESH MATERIALIZED VIEW matview;\E
......@@ -2708,17 +2294,14 @@ my %tests = (
no_owner => 1,
only_dump_test_schema => 1,
test_schema_plus_blobs => 1,
section_post_data => 1,
},
section_post_data => 1, },
unlike => {
binary_upgrade => 1,
exclude_dump_test_schema => 1,
only_dump_test_table => 1,
pg_dumpall_globals => 1,
schema_only => 1,
section_pre_data => 1,
},
},
section_pre_data => 1, }, },
'REVOKE EXECUTE ON FUNCTION pg_sleep() FROM public' => {
create_order => 15,
create_sql => 'REVOKE EXECUTE ON FUNCTION pg_sleep(float8)
......@@ -2737,14 +2320,11 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'REVOKE SELECT ON TABLE pg_proc FROM public' => {
create_order => 45,
create_sql => 'REVOKE SELECT ON TABLE pg_proc FROM public;',
......@@ -2760,14 +2340,11 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'REVOKE CREATE ON SCHEMA public FROM public' => {
create_order => 16,
create_sql => 'REVOKE CREATE ON SCHEMA public FROM public;',
......@@ -2786,14 +2363,11 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'REVOKE USAGE ON LANGUAGE plpgsql FROM public' => {
create_order => 16,
create_sql => 'REVOKE USAGE ON LANGUAGE plpgsql FROM public;',
......@@ -2809,25 +2383,19 @@ my %tests = (
exclude_test_table_data => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
only_dump_test_schema => 1,
only_dump_test_table => 1,
test_schema_plus_blobs => 1,
},
},
test_schema_plus_blobs => 1, }, },
'REVOKE commands' => { # catch-all for REVOKE commands
regexp => qr/^REVOKE /m,
like => { }, # use more-specific options above
like => {}, # use more-specific options above
unlike => {
column_inserts => 1,
data_only => 1,
no_privs => 1,
pg_dumpall_globals => 1,
},
},
);
pg_dumpall_globals => 1, }, },);
#########################################
# Create a PG instance to test actually dumping from
......@@ -2841,28 +2409,34 @@ my $port = $node->port;
# Start with 2 because of command_exit_is() tests below
my $num_tests = 2;
foreach my $run (sort keys %pgdump_runs) {
foreach my $run (sort keys %pgdump_runs)
{
my $test_key = $run;
# Each run of pg_dump is a test itself
$num_tests++;
# If there is a restore cmd, that's another test
if ($pgdump_runs{$run}->{restore_cmd}) {
if ($pgdump_runs{$run}->{restore_cmd})
{
$num_tests++;
}
if ($pgdump_runs{$run}->{test_key}) {
if ($pgdump_runs{$run}->{test_key})
{
$test_key = $pgdump_runs{$run}->{test_key};
}
# Then count all the tests run against each run
foreach my $test (sort keys %tests) {
if ($tests{$test}->{like}->{$test_key}) {
foreach my $test (sort keys %tests)
{
if ($tests{$test}->{like}->{$test_key})
{
$num_tests++;
}
if ($tests{$test}->{unlike}->{$test_key}) {
if ($tests{$test}->{unlike}->{$test_key})
{
$num_tests++;
}
}
......@@ -2877,17 +2451,26 @@ my $create_sql = '';
foreach my $test (
sort {
if ($tests{$a}->{create_order} and $tests{$b}->{create_order}) {
if ($tests{$a}->{create_order} and $tests{$b}->{create_order})
{
$tests{$a}->{create_order} <=> $tests{$b}->{create_order};
} elsif ($tests{$a}->{create_order}) {
}
elsif ($tests{$a}->{create_order})
{
-1;
} elsif ($tests{$b}->{create_order}) {
}
elsif ($tests{$b}->{create_order})
{
1;
} else {
}
else
{
0;
}
} keys %tests) {
if ($tests{$test}->{create_sql}) {
} keys %tests)
{
if ($tests{$test}->{create_sql})
{
$create_sql .= $tests{$test}->{create_sql};
}
}
......@@ -2898,26 +2481,35 @@ $node->safe_psql('postgres', $create_sql);
#########################################
# Test connecting to a non-existent database
command_exit_is([ 'pg_dump', '-p', "$port", 'qqq' ],
1, 'pg_dump: [archiver (db)] connection to database "qqq" failed: FATAL: database "qqq" does not exist');
command_exit_is(
[ 'pg_dump', '-p', "$port", 'qqq' ],
1,
'pg_dump: [archiver (db)] connection to database "qqq" failed: FATAL: database "qqq" does not exist'
);
command_exit_is([ 'pg_dump', '-p', "$port", '--role=dump_test' ],
1, 'pg_dump: [archiver (db)] query failed: ERROR: permission denied for');
1,
'pg_dump: [archiver (db)] query failed: ERROR: permission denied for');
#########################################
# Run all runs
foreach my $run (sort keys %pgdump_runs) {
foreach my $run (sort keys %pgdump_runs)
{
my $test_key = $run;
$node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} }, "$run: pg_dump runs");
$node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} },
"$run: pg_dump runs");
if ($pgdump_runs{$run}->{restore_cmd}) {
$node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} }, "$run: pg_restore runs");
if ($pgdump_runs{$run}->{restore_cmd})
{
$node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} },
"$run: pg_restore runs");
}
if ($pgdump_runs{$run}->{test_key}) {
if ($pgdump_runs{$run}->{test_key})
{
$test_key = $pgdump_runs{$run}->{test_key};
}
......@@ -2927,13 +2519,19 @@ foreach my $run (sort keys %pgdump_runs) {
# Run all tests where this run is included
# as either a 'like' or 'unlike' test.
foreach my $test (sort keys %tests) {
if ($tests{$test}->{like}->{$test_key}) {
foreach my $test (sort keys %tests)
{
if ($tests{$test}->{like}->{$test_key})
{
like($output_file, $tests{$test}->{regexp}, "$run: dumps $test");
}
if ($tests{$test}->{unlike}->{$test_key}) {
unlike($output_file, $tests{$test}->{regexp}, "$run: does not dump $test");
if ($tests{$test}->{unlike}->{$test_key})
{
unlike(
$output_file,
$tests{$test}->{regexp},
"$run: does not dump $test");
}
}
}
......
......@@ -114,6 +114,7 @@ sub check_query
sub setup_cluster
{
# Initialize master, data checksums are mandatory
$node_master = get_new_node('master');
$node_master->init(allows_streaming => 1);
......
......@@ -13,17 +13,21 @@ $node->append_conf('postgresql.conf', 'track_commit_timestamp = on');
$node->start;
# Create a table, compare "now()" to the commit TS of its xmin
$node->safe_psql('postgres', 'create table t as select now from (select now(), pg_sleep(1)) f');
$node->safe_psql('postgres',
'create table t as select now from (select now(), pg_sleep(1)) f');
my $true = $node->safe_psql('postgres',
'select t.now - ts.* < \'1s\' from t, pg_class c, pg_xact_commit_timestamp(c.xmin) ts where relname = \'t\'');
'select t.now - ts.* < \'1s\' from t, pg_class c, pg_xact_commit_timestamp(c.xmin) ts where relname = \'t\''
);
is($true, 't', 'commit TS is set');
my $ts = $node->safe_psql('postgres',
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t\'');
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t\''
);
# Verify that we read the same TS after crash recovery
$node->stop('immediate');
$node->start;
my $recovered_ts = $node->safe_psql('postgres',
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t\'');
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t\''
);
is($recovered_ts, $ts, 'commit TS remains after crash recovery');
......@@ -11,7 +11,8 @@ my $bkplabel = 'backup';
my $master = get_new_node('master');
$master->init(allows_streaming => 1);
$master->append_conf('postgresql.conf', qq{
$master->append_conf(
'postgresql.conf', qq{
track_commit_timestamp = on
max_wal_senders = 5
wal_level = hot_standby
......@@ -28,22 +29,24 @@ for my $i (1 .. 10)
$master->safe_psql('postgres', "create table t$i()");
}
my $master_ts = $master->safe_psql('postgres',
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't10'});
my $master_lsn = $master->safe_psql('postgres',
'select pg_current_xlog_location()');
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't10'}
);
my $master_lsn =
$master->safe_psql('postgres', 'select pg_current_xlog_location()');
$standby->poll_query_until('postgres',
qq{SELECT '$master_lsn'::pg_lsn <= pg_last_xlog_replay_location()})
or die "slave never caught up";
my $standby_ts = $standby->safe_psql('postgres',
qq{select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = 't10'});
qq{select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = 't10'}
);
is($master_ts, $standby_ts, "standby gives same value as master");
$master->append_conf('postgresql.conf', 'track_commit_timestamp = off');
$master->restart;
$master->safe_psql('postgres', 'checkpoint');
$master_lsn = $master->safe_psql('postgres',
'select pg_current_xlog_location()');
$master_lsn =
$master->safe_psql('postgres', 'select pg_current_xlog_location()');
$standby->poll_query_until('postgres',
qq{SELECT '$master_lsn'::pg_lsn <= pg_last_xlog_replay_location()})
or die "slave never caught up";
......@@ -51,7 +54,12 @@ $standby->safe_psql('postgres', 'checkpoint');
# This one should raise an error now
my ($ret, $standby_ts_stdout, $standby_ts_stderr) = $standby->psql('postgres',
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t10\'');
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t10\''
);
is($ret, 3, 'standby errors when master turned feature off');
is($standby_ts_stdout, '', "standby gives no value when master turned feature off");
like($standby_ts_stderr, qr/could not get commit timestamp data/, 'expected error when master turned feature off');
is($standby_ts_stdout, '',
"standby gives no value when master turned feature off");
like(
$standby_ts_stderr,
qr/could not get commit timestamp data/,
'expected error when master turned feature off');
......@@ -10,7 +10,8 @@ use PostgresNode;
my $bkplabel = 'backup';
my $master = get_new_node('master');
$master->init(allows_streaming => 1);
$master->append_conf('postgresql.conf', qq{
$master->append_conf(
'postgresql.conf', qq{
track_commit_timestamp = on
max_wal_senders = 5
wal_level = hot_standby
......@@ -29,8 +30,8 @@ for my $i (1 .. 10)
$master->append_conf('postgresql.conf', 'track_commit_timestamp = off');
$master->restart;
$master->safe_psql('postgres', 'checkpoint');
my $master_lsn = $master->safe_psql('postgres',
'select pg_current_xlog_location()');
my $master_lsn =
$master->safe_psql('postgres', 'select pg_current_xlog_location()');
$standby->poll_query_until('postgres',
qq{SELECT '$master_lsn'::pg_lsn <= pg_last_xlog_replay_location()})
or die "slave never caught up";
......@@ -38,11 +39,16 @@ $standby->poll_query_until('postgres',
$standby->safe_psql('postgres', 'checkpoint');
$standby->restart;
my ($psql_ret, $standby_ts_stdout, $standby_ts_stderr) = $standby->psql('postgres',
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't10'});
my ($psql_ret, $standby_ts_stdout, $standby_ts_stderr) = $standby->psql(
'postgres',
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't10'}
);
is($psql_ret, 3, 'expect error when getting commit timestamp after restart');
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');
like(
$standby_ts_stderr,
qr/could not get commit timestamp data/,
'expected err msg after restart');
$master->append_conf('postgresql.conf', 'track_commit_timestamp = on');
$master->restart;
......@@ -54,5 +60,7 @@ $standby->poll_query_until('postgres', "SELECT pg_is_in_recovery() <> true");
$standby->safe_psql('postgres', "create table t11()");
my $standby_ts = $standby->safe_psql('postgres',
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't11'});
isnt($standby_ts, '', "standby gives valid value ($standby_ts) after promotion");
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't11'}
);
isnt($standby_ts, '',
"standby gives valid value ($standby_ts) after promotion");
......@@ -46,16 +46,14 @@ my %pgdump_runs = (
'--schema-only',
'--binary-upgrade',
'-d', 'postgres', # alternative way to specify database
],
},
], },
clean => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/clean.sql",
'-c',
'-d', 'postgres', # alternative way to specify database
],
},
], },
clean_if_exists => {
dump_cmd => [
'pg_dump',
......@@ -63,157 +61,94 @@ my %pgdump_runs = (
'-c',
'--if-exists',
'-E', 'UTF8', # no-op, just tests that option is accepted
'postgres',
],
},
'postgres', ], },
column_inserts => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/column_inserts.sql",
'-a',
'--column-inserts',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/column_inserts.sql", '-a',
'--column-inserts', 'postgres', ], },
createdb => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/createdb.sql",
'-C',
'-R', # no-op, just for testing
'postgres',
],
},
'postgres', ], },
data_only => {
dump_cmd => [
'pg_dump',
'-f', "$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',
],
dump_cmd => [ 'pg_dump', '-f', "$tempdir/defaults.sql", 'postgres', ],
},
defaults_custom_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fc',
'-Z6',
'-f', "$tempdir/defaults_custom_format.dump",
'postgres',
],
'pg_dump', '-Fc', '-Z6', '-f',
"$tempdir/defaults_custom_format.dump", 'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_custom_format.sql",
"$tempdir/defaults_custom_format.dump",
],
},
'-f',
"$tempdir/defaults_custom_format.sql",
"$tempdir/defaults_custom_format.dump", ], },
defaults_dir_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fd',
'-f', "$tempdir/defaults_dir_format",
'postgres',
],
'pg_dump', '-Fd', '-f', "$tempdir/defaults_dir_format",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_dir_format.sql",
"$tempdir/defaults_dir_format",
],
},
'-f',
"$tempdir/defaults_dir_format.sql",
"$tempdir/defaults_dir_format", ], },
defaults_parallel => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Fd',
'-j2',
'-f', "$tempdir/defaults_parallel",
'postgres',
],
'pg_dump', '-Fd', '-j2', '-f', "$tempdir/defaults_parallel",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_parallel.sql",
"$tempdir/defaults_parallel",
],
'pg_restore', '-f',
"$tempdir/defaults_parallel.sql", "$tempdir/defaults_parallel", ],
},
defaults_tar_format => {
test_key => 'defaults',
dump_cmd => [
'pg_dump',
'-Ft',
'-f', "$tempdir/defaults_tar_format.tar",
'postgres',
],
'pg_dump', '-Ft', '-f', "$tempdir/defaults_tar_format.tar",
'postgres', ],
restore_cmd => [
'pg_restore',
'-f', "$tempdir/defaults_tar_format.sql",
"$tempdir/defaults_tar_format.tar",
],
},
'-f',
"$tempdir/defaults_tar_format.sql",
"$tempdir/defaults_tar_format.tar", ], },
pg_dumpall_globals => {
dump_cmd => [
'pg_dumpall',
'-f', "$tempdir/pg_dumpall_globals.sql",
'-g',
],
},
dump_cmd =>
[ 'pg_dumpall', '-f', "$tempdir/pg_dumpall_globals.sql", '-g', ], },
no_privs => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/no_privs.sql",
'-x',
'postgres',
],
},
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/no_privs.sql", '-x', 'postgres', ], },
no_owner => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/no_owner.sql",
'-O',
'postgres',
],
},
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/no_owner.sql", '-O', 'postgres', ], },
schema_only => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/schema_only.sql",
'-s',
'postgres',
],
dump_cmd =>
[ 'pg_dump', '-f', "$tempdir/schema_only.sql", '-s', 'postgres', ],
},
section_pre_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_pre_data.sql",
'--section=pre-data',
'postgres',
],
},
'pg_dump', '-f', "$tempdir/section_pre_data.sql",
'--section=pre-data', 'postgres', ], },
section_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_data.sql",
'--section=data',
'postgres',
],
},
'pg_dump', '-f',
"$tempdir/section_data.sql", '--section=data',
'postgres', ], },
section_post_data => {
dump_cmd => [
'pg_dump',
'-f', "$tempdir/section_post_data.sql",
'--section=post-data',
'postgres',
],
},
);
'pg_dump', '-f', "$tempdir/section_post_data.sql",
'--section=post-data', 'postgres', ], },);
###############################################################
# Definition of the tests to run.
......@@ -267,21 +202,16 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
binary_upgrade => 1,
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE ROLE dump_test' => {
create_order => 1,
create_sql => 'CREATE ROLE dump_test;',
regexp => qr/^CREATE ROLE dump_test;$/m,
like => {
pg_dumpall_globals => 1,
},
like => { pg_dumpall_globals => 1, },
unlike => {
binary_upgrade => 1,
clean => 1,
......@@ -292,18 +222,14 @@ my %tests = (
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE TABLE regress_pg_dump_table' => {
regexp => qr/^
\QCREATE TABLE regress_pg_dump_table (\E
\n\s+\Qcol1 integer,\E
\n\s+\Qcol2 integer\E
\n\);$/xm,
like => {
binary_upgrade => 1,
},
like => { binary_upgrade => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -314,16 +240,12 @@ my %tests = (
pg_dumpall_globals => 1,
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'CREATE ACCESS METHOD regress_test_am' => {
regexp => qr/^
\QCREATE ACCESS METHOD regress_test_am TYPE INDEX HANDLER bthandler;\E
$/xm,
like => {
binary_upgrade => 1,
},
like => { binary_upgrade => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -334,9 +256,7 @@ my %tests = (
pg_dumpall_globals => 1,
schema_only => 1,
section_pre_data => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'COMMENT ON EXTENSION test_pg_dump' => {
regexp => qr/^
\QCOMMENT ON EXTENSION test_pg_dump \E
......@@ -351,22 +271,17 @@ my %tests = (
no_privs => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'GRANT SELECT ON TABLE regress_pg_dump_table' => {
regexp => qr/^
\QSELECT pg_catalog.binary_upgrade_set_record_init_privs(true);\E\n
\QGRANT SELECT ON TABLE regress_pg_dump_table TO dump_test;\E\n
\QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E
$/xms,
like => {
binary_upgrade => 1,
},
like => { binary_upgrade => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -377,18 +292,14 @@ my %tests = (
section_pre_data => 1,
no_privs => 1,
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'GRANT SELECT(col1) ON regress_pg_dump_table' => {
regexp => qr/^
\QSELECT pg_catalog.binary_upgrade_set_record_init_privs(true);\E\n
\QGRANT SELECT(col1) ON TABLE regress_pg_dump_table TO PUBLIC;\E\n
\QSELECT pg_catalog.binary_upgrade_set_record_init_privs(false);\E
$/xms,
like => {
binary_upgrade => 1,
},
like => { binary_upgrade => 1, },
unlike => {
clean => 1,
clean_if_exists => 1,
......@@ -399,9 +310,7 @@ my %tests = (
section_pre_data => 1,
no_privs => 1,
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'GRANT SELECT(col2) ON regress_pg_dump_table TO dump_test' => {
create_order => 4,
create_sql => 'GRANT SELECT(col2) ON regress_pg_dump_table
......@@ -417,14 +326,11 @@ my %tests = (
defaults => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
no_privs => 1,
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
section_post_data => 1, }, },
'REVOKE SELECT(col1) ON regress_pg_dump_table' => {
create_order => 3,
create_sql => 'REVOKE SELECT(col1) ON regress_pg_dump_table
......@@ -440,15 +346,11 @@ my %tests = (
defaults => 1,
no_owner => 1,
schema_only => 1,
section_pre_data => 1,
},
section_pre_data => 1, },
unlike => {
no_privs => 1,
pg_dumpall_globals => 1,
section_post_data => 1,
},
},
);
section_post_data => 1, }, },);
#########################################
# Create a PG instance to test actually dumping from
......@@ -461,28 +363,34 @@ my $port = $node->port;
my $num_tests = 0;
foreach my $run (sort keys %pgdump_runs) {
foreach my $run (sort keys %pgdump_runs)
{
my $test_key = $run;
# Each run of pg_dump is a test itself
$num_tests++;
# If there is a restore cmd, that's another test
if ($pgdump_runs{$run}->{restore_cmd}) {
if ($pgdump_runs{$run}->{restore_cmd})
{
$num_tests++;
}
if ($pgdump_runs{$run}->{test_key}) {
if ($pgdump_runs{$run}->{test_key})
{
$test_key = $pgdump_runs{$run}->{test_key};
}
# Then count all the tests run against each run
foreach my $test (sort keys %tests) {
if ($tests{$test}->{like}->{$test_key}) {
foreach my $test (sort keys %tests)
{
if ($tests{$test}->{like}->{$test_key})
{
$num_tests++;
}
if ($tests{$test}->{unlike}->{$test_key}) {
if ($tests{$test}->{unlike}->{$test_key})
{
$num_tests++;
}
}
......@@ -497,17 +405,26 @@ my $create_sql = '';
foreach my $test (
sort {
if ($tests{$a}->{create_order} and $tests{$b}->{create_order}) {
if ($tests{$a}->{create_order} and $tests{$b}->{create_order})
{
$tests{$a}->{create_order} <=> $tests{$b}->{create_order};
} elsif ($tests{$a}->{create_order}) {
}
elsif ($tests{$a}->{create_order})
{
-1;
} elsif ($tests{$b}->{create_order}) {
}
elsif ($tests{$b}->{create_order})
{
1;
} else {
}
else
{
0;
}
} keys %tests) {
if ($tests{$test}->{create_sql}) {
} keys %tests)
{
if ($tests{$test}->{create_sql})
{
$create_sql .= $tests{$test}->{create_sql};
}
}
......@@ -518,17 +435,22 @@ $node->safe_psql('postgres', $create_sql);
#########################################
# Run all runs
foreach my $run (sort keys %pgdump_runs) {
foreach my $run (sort keys %pgdump_runs)
{
my $test_key = $run;
$node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} }, "$run: pg_dump runs");
$node->command_ok(\@{ $pgdump_runs{$run}->{dump_cmd} },
"$run: pg_dump runs");
if ($pgdump_runs{$run}->{restore_cmd}) {
$node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} }, "$run: pg_restore runs");
if ($pgdump_runs{$run}->{restore_cmd})
{
$node->command_ok(\@{ $pgdump_runs{$run}->{restore_cmd} },
"$run: pg_restore runs");
}
if ($pgdump_runs{$run}->{test_key}) {
if ($pgdump_runs{$run}->{test_key})
{
$test_key = $pgdump_runs{$run}->{test_key};
}
......@@ -538,13 +460,19 @@ foreach my $run (sort keys %pgdump_runs) {
# Run all tests where this run is included
# as either a 'like' or 'unlike' test.
foreach my $test (sort keys %tests) {
if ($tests{$test}->{like}->{$test_key}) {
foreach my $test (sort keys %tests)
{
if ($tests{$test}->{like}->{$test_key})
{
like($output_file, $tests{$test}->{regexp}, "$run: dumps $test");
}
if ($tests{$test}->{unlike}->{$test_key}) {
unlike($output_file, $tests{$test}->{regexp}, "$run: does not dump $test");
if ($tests{$test}->{unlike}->{$test_key})
{
unlike(
$output_file,
$tests{$test}->{regexp},
"$run: does not dump $test");
}
}
}
......
......@@ -103,6 +103,7 @@ our ($test_localhost, $test_pghost, $last_port_assigned, @all_nodes);
INIT
{
# PGHOST is set once and for all through a single series of tests when
# this module is loaded.
$test_localhost = "127.0.0.1";
......@@ -540,11 +541,12 @@ sub _backup_fs
if ($hot)
{
# We ignore pg_stop_backup's return value. We also assume archiving
# is enabled; otherwise the caller will have to copy the remaining
# segments.
my $stdout = $self->safe_psql('postgres',
'SELECT * FROM pg_stop_backup();');
my $stdout =
$self->safe_psql('postgres', 'SELECT * FROM pg_stop_backup();');
print "# pg_stop_backup: $stdout\n";
}
......@@ -842,6 +844,7 @@ sub get_new_node
while ($found == 0)
{
# advance $port, wrapping correctly around range end
$port = 49152 if ++$port >= 65536;
print "# Checking port $port\n";
......@@ -896,6 +899,7 @@ sub get_new_node
# order, later when the File::Temp objects are destroyed.
END
{
# take care not to change the script's exit value
my $exit_code = $?;
......@@ -1078,7 +1082,7 @@ sub psql
IPC::Run::timeout($params{timeout}, exception => $timeout_exception)
if (defined($params{timeout}));
${$params{timed_out}} = 0 if defined $params{timed_out};
${ $params{timed_out} } = 0 if defined $params{timed_out};
# IPC::Run would otherwise append to existing contents:
$$stdout = "" if ref($stdout);
......@@ -1107,6 +1111,7 @@ sub psql
my $exc_save = $@;
if ($exc_save)
{
# IPC::Run::run threw an exception. re-throw unless it's a
# timeout, which we'll handle by testing is_expired
die $exc_save
......
......@@ -93,7 +93,8 @@ sub _copypath_recurse
# Can't handle symlinks or other weird things
die "Source path \"$srcpath\" is not a regular file or directory"
unless -f $srcpath or -d $srcpath;
unless -f $srcpath
or -d $srcpath;
# Abort if destination path already exists. Should we allow directories
# to exist already?
......
......@@ -109,6 +109,7 @@ INIT
END
{
# Preserve temporary directory for this test on failure
$File::Temp::KEEP_ALL = 1 unless all_tests_passing();
}
......
......@@ -51,10 +51,13 @@ my $result =
print "standby 1: $result\n";
is($result, qq(1002), 'check streamed content on standby 1');
$result = $node_standby_2->safe_psql('postgres', "SELECT count(*) FROM tab_int");
$result =
$node_standby_2->safe_psql('postgres', "SELECT count(*) FROM tab_int");
print "standby 2: $result\n";
is($result, qq(1002), 'check streamed content on standby 2');
# Check that only READ-only queries can run on standbys
is($node_standby_1->psql('postgres', 'INSERT INTO tab_int VALUES (1)'), 3, 'Read-only queries on standby 1');
is($node_standby_2->psql('postgres', 'INSERT INTO tab_int VALUES (1)'), 3, 'Read-only queries on standby 2');
is($node_standby_1->psql('postgres', 'INSERT INTO tab_int VALUES (1)'),
3, 'Read-only queries on standby 1');
is($node_standby_2->psql('postgres', 'INSERT INTO tab_int VALUES (1)'),
3, 'Read-only queries on standby 2');
......@@ -48,5 +48,6 @@ my $caughtup_query =
$node_standby->poll_query_until('postgres', $caughtup_query)
or die "Timed out while waiting for standby to catch up";
my $result = $node_standby->safe_psql('postgres', "SELECT count(*) FROM tab_int");
my $result =
$node_standby->safe_psql('postgres', "SELECT count(*) FROM tab_int");
is($result, qq(1000), 'check content from archives');
......@@ -66,7 +66,8 @@ $node_master->backup('my_backup');
# target TXID.
$node_master->safe_psql('postgres',
"INSERT INTO tab_int VALUES (generate_series(1001,2000))");
my $recovery_txid = $node_master->safe_psql('postgres', "SELECT txid_current()");
my $recovery_txid =
$node_master->safe_psql('postgres', "SELECT txid_current()");
my $lsn2 =
$node_master->safe_psql('postgres', "SELECT pg_current_xlog_location();");
......
......@@ -63,8 +63,8 @@ $node_standby_1->poll_query_until('postgres',
"SELECT pg_is_in_recovery() <> true");
$node_standby_1->safe_psql('postgres',
"INSERT INTO tab_int VALUES (generate_series(1001,2000))");
$until_lsn =
$node_standby_1->safe_psql('postgres', "SELECT pg_current_xlog_location();");
$until_lsn = $node_standby_1->safe_psql('postgres',
"SELECT pg_current_xlog_location();");
$caughtup_query =
"SELECT '$until_lsn'::pg_lsn <= pg_last_xlog_replay_location()";
$node_standby_2->poll_query_until('postgres', $caughtup_query)
......
......@@ -47,10 +47,11 @@ my $until_lsn =
my $remaining = 90;
while ($remaining-- > 0)
{
# Done waiting?
my $replay_status =
$node_standby->safe_psql('postgres',
"SELECT (pg_last_xlog_replay_location() - '$until_lsn'::pg_lsn) >= 0");
my $replay_status = $node_standby->safe_psql('postgres',
"SELECT (pg_last_xlog_replay_location() - '$until_lsn'::pg_lsn) >= 0"
);
last if $replay_status eq 't';
# No, sleep some more.
......@@ -59,7 +60,8 @@ while ($remaining-- > 0)
sleep $sleep;
}
die "Maximum number of attempts reached ($remaining remain)" if $remaining < 0;
die "Maximum number of attempts reached ($remaining remain)"
if $remaining < 0;
# This test is successful if and only if the LSN has been applied with at least
# the configured apply delay.
......
......@@ -6,7 +6,8 @@ use TestLib;
use Test::More tests => 8;
# Query checking sync_priority and sync_state of each standby
my $check_sql = "SELECT application_name, sync_priority, sync_state FROM pg_stat_replication ORDER BY application_name;";
my $check_sql =
"SELECT application_name, sync_priority, sync_state FROM pg_stat_replication ORDER BY application_name;";
# Check that sync_state of each standby is expected.
# If $setting is given, synchronous_standby_names is set to it and
......@@ -71,7 +72,8 @@ $node_standby_3->start;
# Check that sync_state is determined correctly when
# synchronous_standby_names is specified in old syntax.
test_sync_state($node_master, qq(standby1|1|sync
test_sync_state(
$node_master, qq(standby1|1|sync
standby2|2|potential
standby3|0|async),
'old syntax of synchronous_standby_names',
......@@ -82,7 +84,8 @@ standby3|0|async),
# Note that standby1 is chosen as sync standby because
# it's stored in the head of WalSnd array which manages
# all the standbys though they have the same priority.
test_sync_state($node_master, qq(standby1|1|sync
test_sync_state(
$node_master, qq(standby1|1|sync
standby2|1|potential
standby3|1|potential),
'asterisk in synchronous_standby_names',
......@@ -100,7 +103,8 @@ $node_standby_3->start;
# Specify 2 as the number of sync standbys.
# Check that two standbys are in 'sync' state.
test_sync_state($node_master, qq(standby2|2|sync
test_sync_state(
$node_master, qq(standby2|2|sync
standby3|3|sync),
'2 synchronous standbys',
'2(standby1,standby2,standby3)');
......@@ -118,7 +122,8 @@ $node_standby_4->start;
# synchronous_standby_names are considered as sync. Also check that
# standby3 appearing later represents potential, and standby4 is
# in 'async' state because it's not in the list.
test_sync_state($node_master, qq(standby1|1|sync
test_sync_state(
$node_master, qq(standby1|1|sync
standby2|2|sync
standby3|3|potential
standby4|0|async),
......@@ -127,7 +132,8 @@ standby4|0|async),
# Check that sync_state of each standby is determined correctly
# when num_sync exceeds the number of names of potential sync standbys
# specified in synchronous_standby_names.
test_sync_state($node_master, qq(standby1|0|async
test_sync_state(
$node_master, qq(standby1|0|async
standby2|4|sync
standby3|3|sync
standby4|1|sync),
......@@ -138,7 +144,8 @@ standby4|1|sync),
# but does not make sense in most cases. Check that sync_state is
# chosen properly even in case of that setting.
# The priority of standby2 should be 2 because it matches * first.
test_sync_state($node_master, qq(standby1|1|sync
test_sync_state(
$node_master, qq(standby1|1|sync
standby2|2|sync
standby3|2|potential
standby4|2|potential),
......@@ -147,7 +154,8 @@ standby4|2|potential),
# Check that the setting of '2(*)' chooses standby2 and standby3 that are stored
# earlier in WalSnd array as sync standbys.
test_sync_state($node_master, qq(standby1|1|potential
test_sync_state(
$node_master, qq(standby1|1|potential
standby2|1|sync
standby3|1|sync
standby4|1|potential),
......@@ -159,7 +167,8 @@ $node_standby_3->stop;
# Check that the state of standby1 stored earlier in WalSnd array than
# standby4 is transited from potential to sync.
test_sync_state($node_master, qq(standby1|1|sync
test_sync_state(
$node_master, qq(standby1|1|sync
standby2|1|sync
standby4|1|potential),
'potential standby found earlier in array is promoted to sync');
......@@ -374,7 +374,8 @@ sub output_details
{
$item->{'message'} =~ m/^\s*(.*)/;
output_str("%s [%s] %s\n",
output_str(
"%s [%s] %s\n",
substr($c->{'date'}, 0, 10),
substr($c->{'commit'}, 0, 9),
substr($1, 0, 56));
......@@ -385,8 +386,7 @@ sub output_details
if (!$master_only);
output_str("Release: %s ", $c->{'last_tag'})
if (defined $c->{'last_tag'});
output_str("[%s] %s\n",
substr($c->{'commit'}, 0, 9),
output_str("[%s] %s\n", substr($c->{'commit'}, 0, 9),
$c->{'date'});
}
}
......
......@@ -582,7 +582,8 @@ sub CopyIncludeFiles
'Public headers', $target . '/include/',
'src/include/', 'postgres_ext.h',
'pg_config.h', 'pg_config_ext.h',
'pg_config_os.h', 'dynloader.h', 'pg_config_manual.h');
'pg_config_os.h', 'dynloader.h',
'pg_config_manual.h');
lcopy('src/include/libpq/libpq-fs.h', $target . '/include/libpq/')
|| croak 'Could not copy libpq-fs.h';
......
......@@ -41,9 +41,12 @@ my $contrib_extrasource = {
'cube' => [ 'contrib/cube/cubescan.l', 'contrib/cube/cubeparse.y' ],
'seg' => [ 'contrib/seg/segscan.l', 'contrib/seg/segparse.y' ], };
my @contrib_excludes = (
'commit_ts', 'hstore_plperl', 'hstore_plpython', 'intagg',
'ltree_plpython', 'pgcrypto', 'sepgsql', 'brin',
'test_extensions', 'test_pg_dump', 'snapshot_too_old');
'commit_ts', 'hstore_plperl',
'hstore_plpython', 'intagg',
'ltree_plpython', 'pgcrypto',
'sepgsql', 'brin',
'test_extensions', 'test_pg_dump',
'snapshot_too_old');
# Set of variables for frontend modules
my $frontend_defines = { 'initdb' => 'FRONTEND' };
......@@ -63,9 +66,9 @@ my $frontend_extralibs = {
'psql' => ['ws2_32.lib'] };
my $frontend_extraincludes = {
'initdb' => ['src/timezone'],
'psql' => [ 'src/backend' ] };
'psql' => ['src/backend'] };
my $frontend_extrasource = {
'psql' => [ 'src/bin/psql/psqlscanslash.l' ],
'psql' => ['src/bin/psql/psqlscanslash.l'],
'pgbench' =>
[ 'src/bin/pgbench/exprscan.l', 'src/bin/pgbench/exprparse.y' ] };
my @frontend_excludes = (
......@@ -155,8 +158,10 @@ sub mkvcbuild
$postgres->AddFiles('src/backend/bootstrap', 'bootscanner.l',
'bootparse.y');
$postgres->AddFiles('src/backend/utils/misc', 'guc-file.l');
$postgres->AddFiles('src/backend/replication', 'repl_scanner.l',
'repl_gram.y', 'syncrep_scanner.l', 'syncrep_gram.y');
$postgres->AddFiles(
'src/backend/replication', 'repl_scanner.l',
'repl_gram.y', 'syncrep_scanner.l',
'syncrep_gram.y');
$postgres->AddDefine('BUILDING_DLL');
$postgres->AddLibrary('secur32.lib');
$postgres->AddLibrary('ws2_32.lib');
......@@ -625,8 +630,7 @@ sub mkvcbuild
}
}
$proj->AddIncludeDir('src/interfaces/libpq');
$proj->AddReference($libpq, $libpgfeutils, $libpgcommon,
$libpgport);
$proj->AddReference($libpq, $libpgfeutils, $libpgcommon, $libpgport);
$proj->AddDirResourceFile('src/bin/scripts');
$proj->AddLibrary('ws2_32.lib');
}
......
......@@ -286,7 +286,8 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY
}
if (IsNewer(
'src/include/storage/lwlocknames.h', 'src/backend/storage/lmgr/lwlocknames.txt'))
'src/include/storage/lwlocknames.h',
'src/backend/storage/lmgr/lwlocknames.txt'))
{
print "Generating lwlocknames.c and lwlocknames.h...\n";
chdir('src/backend/storage/lmgr');
......@@ -297,13 +298,13 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY
'src/include/storage/lwlocknames.h',
'src/backend/storage/lmgr/lwlocknames.h'))
{
copyFile('src/backend/storage/lmgr/lwlocknames.h',
copyFile(
'src/backend/storage/lmgr/lwlocknames.h',
'src/include/storage/lwlocknames.h');
}
if (IsNewer(
'src/include/dynloader.h',
'src/backend/port/dynloader/win32.h'))
'src/include/dynloader.h', 'src/backend/port/dynloader/win32.h'))
{
copyFile('src/backend/port/dynloader/win32.h',
'src/include/dynloader.h');
......@@ -352,8 +353,7 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY
if ($self->{options}->{tcl}
&& IsNewer(
'src/pl/tcl/pltclerrcodes.h',
'src/backend/utils/errcodes.txt'))
'src/pl/tcl/pltclerrcodes.h', 'src/backend/utils/errcodes.txt'))
{
print "Generating pltclerrcodes.h...\n";
system(
......
......@@ -53,7 +53,8 @@ elsif (uc($ARGV[0]) ne "RELEASE")
if ($buildwhat and $vcver >= 10.00)
{
system(
"msbuild $buildwhat.vcxproj /verbosity:normal /p:Configuration=$bconf");
"msbuild $buildwhat.vcxproj /verbosity:normal /p:Configuration=$bconf"
);
}
elsif ($buildwhat)
{
......
......@@ -16,8 +16,8 @@ my ($flexver) = `flex -V`; # grab first line
$flexver = (split(/\s+/, $flexver))[1];
$flexver =~ s/[^0-9.]//g;
my @verparts = split(/\./, $flexver);
unless ($verparts[0] == 2 &&
($verparts[1] > 5 || ($verparts[1] == 5 && $verparts[2] >= 31)))
unless ($verparts[0] == 2
&& ($verparts[1] > 5 || ($verparts[1] == 5 && $verparts[2] >= 31)))
{
print "WARNING! Flex install not found, or unsupported Flex version.\n";
print "echo Attempting to build without.\n";
......
......@@ -184,7 +184,7 @@ sub tap_check
my $dir = shift;
chdir $dir;
my @args = ( "prove", "--verbose", "t/*.pl");
my @args = ("prove", "--verbose", "t/*.pl");
# adjust the environment for just this test
local %ENV = %ENV;
......@@ -332,6 +332,7 @@ sub contribcheck
my $mstat = 0;
foreach my $module (glob("*"))
{
# these configuration-based exclusions must match Install.pm
next if ($module eq "uuid-ossp" && !defined($config->{uuid}));
next if ($module eq "sslinfo" && !defined($config->{openssl}));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment