|
|
|
@ -45,175 +45,110 @@ my %pgdump_runs = ( |
|
|
|
|
'-f', "$tempdir/binary_upgrade.sql", |
|
|
|
|
'--schema-only', |
|
|
|
|
'--binary-upgrade', |
|
|
|
|
'-d', 'postgres', # alternative way to specify database |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
'-d', 'postgres', # alternative way to specify database |
|
|
|
|
], }, |
|
|
|
|
clean => { |
|
|
|
|
dump_cmd => [ |
|
|
|
|
'pg_dump', |
|
|
|
|
'-f', "$tempdir/clean.sql", |
|
|
|
|
'-c', |
|
|
|
|
'-d', 'postgres', # alternative way to specify database |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
'-d', 'postgres', # alternative way to specify database |
|
|
|
|
], }, |
|
|
|
|
clean_if_exists => { |
|
|
|
|
dump_cmd => [ |
|
|
|
|
'pg_dump', |
|
|
|
|
'-f', "$tempdir/clean_if_exists.sql", |
|
|
|
|
'-c', |
|
|
|
|
'--if-exists', |
|
|
|
|
'-E', 'UTF8', # no-op, just tests that option is accepted |
|
|
|
|
'postgres', |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
'-E', 'UTF8', # no-op, just tests that option is accepted |
|
|
|
|
'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', |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
'-R', # no-op, just for testing |
|
|
|
|
'postgres', ], }, |
|
|
|
|
data_only => { |
|
|
|
|
dump_cmd => [ |
|
|
|
|
'pg_dump', |
|
|
|
|
'-f', "$tempdir/data_only.sql", |
|
|
|
|
'-a', |
|
|
|
|
'-v', # no-op, just make sure it works |
|
|
|
|
'postgres', |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
'-v', # no-op, just make sure it works |
|
|
|
|
'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. |
|
|
|
@ -255,200 +190,167 @@ my %pgdump_runs = ( |
|
|
|
|
my %tests = ( |
|
|
|
|
'CREATE EXTENSION test_pg_dump' => { |
|
|
|
|
create_order => 2, |
|
|
|
|
create_sql => 'CREATE EXTENSION test_pg_dump;', |
|
|
|
|
regexp => qr/^ |
|
|
|
|
create_sql => 'CREATE EXTENSION test_pg_dump;', |
|
|
|
|
regexp => qr/^ |
|
|
|
|
\QCREATE EXTENSION IF NOT EXISTS test_pg_dump WITH SCHEMA public;\E |
|
|
|
|
$/xm, |
|
|
|
|
like => { |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
}, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, }, |
|
|
|
|
unlike => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
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, |
|
|
|
|
}, |
|
|
|
|
unlike => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
section_post_data => 1, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
create_sql => 'CREATE ROLE dump_test;', |
|
|
|
|
regexp => qr/^CREATE ROLE dump_test;$/m, |
|
|
|
|
like => { pg_dumpall_globals => 1, }, |
|
|
|
|
unlike => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_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, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
pg_dumpall_globals => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
section_post_data => 1, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_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, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
pg_dumpall_globals => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
section_post_data => 1, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
section_post_data => 1, }, }, |
|
|
|
|
'COMMENT ON EXTENSION test_pg_dump' => { |
|
|
|
|
regexp => qr/^ |
|
|
|
|
\QCOMMENT ON EXTENSION test_pg_dump \E |
|
|
|
|
\QIS 'Test pg_dump with an extension';\E |
|
|
|
|
$/xm, |
|
|
|
|
like => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
}, |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 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, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
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, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
no_privs => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
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 |
|
|
|
|
create_sql => 'GRANT SELECT(col2) ON regress_pg_dump_table |
|
|
|
|
TO dump_test;', |
|
|
|
|
regexp => qr/^ |
|
|
|
|
\QGRANT SELECT(col2) ON TABLE regress_pg_dump_table TO dump_test;\E |
|
|
|
|
$/xm, |
|
|
|
|
like => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
}, |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, }, |
|
|
|
|
unlike => { |
|
|
|
|
no_privs => 1, |
|
|
|
|
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 |
|
|
|
|
create_sql => 'REVOKE SELECT(col1) ON regress_pg_dump_table |
|
|
|
|
FROM PUBLIC;', |
|
|
|
|
regexp => qr/^ |
|
|
|
|
\QREVOKE SELECT(col1) ON TABLE regress_pg_dump_table FROM PUBLIC;\E |
|
|
|
|
$/xm, |
|
|
|
|
like => { |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, |
|
|
|
|
}, |
|
|
|
|
binary_upgrade => 1, |
|
|
|
|
clean => 1, |
|
|
|
|
clean_if_exists => 1, |
|
|
|
|
createdb => 1, |
|
|
|
|
defaults => 1, |
|
|
|
|
no_owner => 1, |
|
|
|
|
schema_only => 1, |
|
|
|
|
section_pre_data => 1, }, |
|
|
|
|
unlike => { |
|
|
|
|
no_privs => 1, |
|
|
|
|
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"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|