'pg_dump', '--no-sync',
'-f', "$tempdir/defaults.sql",
'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', ], },
+ 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', ], },
# Do not use --no-sync to give test coverage for data sync.
defaults_custom_format => {
pg_dumpall_globals_clean => 1,
test_schema_plus_blobs => 1, }, },
+ 'CREATE SCHEMA public' => {
+ all_runs => 1,
+ catch_all => 'CREATE ... commands',
+ regexp => qr/^CREATE SCHEMA public;/m,
+ like => {
+ clean => 1,
+ clean_if_exists => 1, },
+ unlike => {
+ binary_upgrade => 1,
+ createdb => 1,
+ defaults => 1,
+ exclude_test_table => 1,
+ exclude_test_table_data => 1,
+ no_blobs => 1,
+ no_privs => 1,
+ no_owner => 1,
+ only_dump_test_schema => 1,
+ pg_dumpall_dbprivs => 1,
+ schema_only => 1,
+ section_pre_data => 1,
+ test_schema_plus_blobs => 1,
+ with_oids => 1,
+ exclude_dump_test_schema => 1,
+ only_dump_test_table => 1,
+ pg_dumpall_globals => 1,
+ pg_dumpall_globals_clean => 1,
+ role => 1,
+ section_post_data => 1, }, },
+
'CREATE SCHEMA dump_test' => {
all_runs => 1,
catch_all => 'CREATE ... commands',
data_only => 1,
section_data => 1, }, },
+ 'DROP SCHEMA public (for testing without public schema)' => {
+ all_runs => 1,
+ database => 'regress_pg_dump_test',
+ create_order => 100,
+ create_sql => 'DROP SCHEMA public;',
+ regexp => qr/^DROP SCHEMA public;/m,
+ like => { },
+ unlike => { defaults_no_public => 1,
+ defaults_no_public_clean => 1, } },
+
+ 'DROP SCHEMA public' => {
+ all_runs => 1,
+ catch_all => 'DROP ... commands',
+ regexp => qr/^DROP SCHEMA public;/m,
+ like => { clean => 1 },
+ unlike => {
+ clean_if_exists => 1,
+ pg_dumpall_globals_clean => 1, }, },
+
+ 'DROP SCHEMA IF EXISTS public' => {
+ all_runs => 1,
+ catch_all => 'DROP ... commands',
+ regexp => qr/^DROP SCHEMA IF EXISTS public;/m,
+ like => { clean_if_exists => 1 },
+ unlike => {
+ clean => 1,
+ pg_dumpall_globals_clean => 1, }, },
+
'DROP EXTENSION plpgsql' => {
all_runs => 1,
catch_all => 'DROP ... commands',
$collation_support = 1;
}
+# Create a second database for certain tests to work against
+$node->psql('postgres','create database regress_pg_dump_test;');
+
# Start with number of command_fails_like()*2 tests below (each
# command_fails_like is actually 2 tests)
my $num_tests = 12;
foreach my $run (sort keys %pgdump_runs)
{
my $test_key = $run;
+ my $run_db = 'postgres';
+
+ if (defined($pgdump_runs{$run}->{database})) {
+ $run_db = $pgdump_runs{$run}->{database};
+ }
# Each run of pg_dump is a test itself
$num_tests++;
# Then count all the tests run against each run
foreach my $test (sort keys %tests)
{
+ # postgres is the default database, if it isn't overridden
+ my $test_db = 'postgres';
+
+ # Specific tests can override the database to use
+ if (defined($tests{$test}->{database})) {
+ $test_db = $tests{$test}->{database};
+ }
+
+ # The database to test against needs to match the database the run is
+ # for, so skip combinations where they don't match up.
+ if ($run_db ne $test_db) {
+ next;
+ }
# Skip any collation-related commands if there is no collation support
if (!$collation_support && defined($tests{$test}->{collation}))
# Set up schemas, tables, etc, to be dumped.
# Build up the create statements
-my $create_sql = '';
+my %create_sql = ();
foreach my $test (
sort {
}
} keys %tests)
{
+ my $test_db = 'postgres';
+
+ if (defined($tests{$test}->{database})) {
+ $test_db = $tests{$test}->{database};
+ }
+
if ($tests{$test}->{create_sql})
{
}
# Add terminating semicolon
- $create_sql .= $tests{$test}->{create_sql} . ";";
+ $create_sql{$test_db} .= $tests{$test}->{create_sql} . ";";
}
}
# Send the combined set of commands to psql
-$node->safe_psql('postgres', $create_sql);
+foreach my $db (sort keys %create_sql)
+{
+ $node->safe_psql($db, $create_sql{$db});
+}
#########################################
# Test connecting to a non-existent database