You've already forked pg_probackup
mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2025-07-07 06:05:35 +02:00
* [PGPRO-5673] add missing grants (caused by CVE-2018-1058 fixes #415 PGPRO-5315) * tests.backup.BackupTest.test_missing_replication_permission_1: fix test for changed 14s output * tests.backup.BackupTest.test_missing_replication_permission: fix test for 9.5 * tests.checkdb.CheckdbTest.test_checkdb_with_least_privileges: remove grant for nonexistent (in 10) bt_index_check(regclass, bool) * tests.checkdb.CheckdbTest.test_checkdb_with_least_privileges: remove grant for nonexistent (in 9.5) pg_catalog.pg_control_system() * tests.checkdb.CheckdbTest.test_checkdb_with_least_privileges: remove grant for nonexistent (in amcheck_next) bt_index_check(regclass) * adapt tests/restore.py to Python-3.5 (used in travis tests) * skip issue_313 test
This commit is contained in:
committed by
GitHub
parent
f7a81aa5fd
commit
bd81f7fc12
@ -606,6 +606,7 @@ BEGIN;
|
|||||||
CREATE ROLE backup WITH LOGIN;
|
CREATE ROLE backup WITH LOGIN;
|
||||||
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
||||||
|
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup;
|
||||||
@ -624,6 +625,7 @@ BEGIN;
|
|||||||
CREATE ROLE backup WITH LOGIN;
|
CREATE ROLE backup WITH LOGIN;
|
||||||
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
||||||
|
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean) TO backup;
|
||||||
@ -644,6 +646,7 @@ BEGIN;
|
|||||||
CREATE ROLE backup WITH LOGIN;
|
CREATE ROLE backup WITH LOGIN;
|
||||||
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
||||||
|
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
|
||||||
@ -5531,6 +5534,7 @@ BEGIN;
|
|||||||
CREATE ROLE backup WITH LOGIN REPLICATION;
|
CREATE ROLE backup WITH LOGIN REPLICATION;
|
||||||
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
GRANT USAGE ON SCHEMA pg_catalog TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
|
||||||
|
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
|
||||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
|
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
|
||||||
|
@ -2020,10 +2020,12 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
||||||
@ -2053,10 +2055,12 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
@ -2091,8 +2095,10 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
@ -3249,10 +3255,7 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
if ProbackupTest.enterprise:
|
if ProbackupTest.enterprise:
|
||||||
node.safe_psql(
|
node.safe_psql(
|
||||||
"backupdb",
|
"backupdb",
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup; "
|
||||||
|
|
||||||
node.safe_psql(
|
|
||||||
"backupdb",
|
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
||||||
|
|
||||||
sleep(2)
|
sleep(2)
|
||||||
@ -3270,9 +3273,11 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"\n Output: {0} \n CMD: {1}".format(
|
"\n Output: {0} \n CMD: {1}".format(
|
||||||
repr(self.output), self.cmd))
|
repr(self.output), self.cmd))
|
||||||
except ProbackupException as e:
|
except ProbackupException as e:
|
||||||
self.assertIn(
|
# 9.5: ERROR: must be superuser or replication role to run a backup
|
||||||
"FATAL: must be superuser or replication role to start walsender",
|
# >=9.6: FATAL: must be superuser or replication role to start walsender
|
||||||
|
self.assertRegex(
|
||||||
e.message,
|
e.message,
|
||||||
|
"ERROR: must be superuser or replication role to run a backup|FATAL: must be superuser or replication role to start walsender",
|
||||||
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
|
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
|
||||||
repr(e.message), self.cmd))
|
repr(e.message), self.cmd))
|
||||||
|
|
||||||
@ -3330,7 +3335,8 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;"
|
||||||
|
)
|
||||||
# PG 9.6
|
# PG 9.6
|
||||||
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
|
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
|
||||||
node.safe_psql(
|
node.safe_psql(
|
||||||
@ -3353,7 +3359,8 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_xlog_replay_location() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_xlog_replay_location() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;"
|
||||||
|
)
|
||||||
# >= 10
|
# >= 10
|
||||||
else:
|
else:
|
||||||
node.safe_psql(
|
node.safe_psql(
|
||||||
@ -3381,10 +3388,7 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
if ProbackupTest.enterprise:
|
if ProbackupTest.enterprise:
|
||||||
node.safe_psql(
|
node.safe_psql(
|
||||||
"backupdb",
|
"backupdb",
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup; "
|
||||||
|
|
||||||
node.safe_psql(
|
|
||||||
"backupdb",
|
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
||||||
|
|
||||||
replica.promote()
|
replica.promote()
|
||||||
@ -3399,9 +3403,13 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
|||||||
'WARNING: Valid full backup on current timeline 2 is not found, trying to look up on previous timelines',
|
'WARNING: Valid full backup on current timeline 2 is not found, trying to look up on previous timelines',
|
||||||
output)
|
output)
|
||||||
|
|
||||||
self.assertIn(
|
# Messages before 14
|
||||||
'WARNING: could not connect to database backupdb: FATAL: must be superuser or replication role to start walsender',
|
# 'WARNING: could not connect to database backupdb: FATAL: must be superuser or replication role to start walsender'
|
||||||
output)
|
# Messages for >=14
|
||||||
|
# 'WARNING: could not connect to database backupdb: connection to server on socket "/tmp/.s.PGSQL.30983" failed: FATAL: must be superuser or replication role to start walsender'
|
||||||
|
self.assertRegex(
|
||||||
|
output,
|
||||||
|
r'WARNING: could not connect to database backupdb: (connection to server on socket "/tmp/.s.PGSQL.\d+" failed: ){0,1}FATAL: must be superuser or replication role to start walsender')
|
||||||
|
|
||||||
# Clean after yourself
|
# Clean after yourself
|
||||||
self.del_test_dir(module_name, fname)
|
self.del_test_dir(module_name, fname)
|
||||||
|
@ -562,15 +562,14 @@ class CheckdbTest(ProbackupTest, unittest.TestCase):
|
|||||||
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
||||||
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.charne("char", "char") TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.charne("char", "char") TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; '
|
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;' # amcheck-next function
|
||||||
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup; '
|
|
||||||
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;'
|
|
||||||
)
|
)
|
||||||
# PG 9.6
|
# PG 9.6
|
||||||
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
|
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
|
||||||
@ -588,6 +587,7 @@ class CheckdbTest(ProbackupTest, unittest.TestCase):
|
|||||||
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
||||||
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
||||||
@ -598,7 +598,33 @@ class CheckdbTest(ProbackupTest, unittest.TestCase):
|
|||||||
# 'GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup; '
|
# 'GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;'
|
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;'
|
||||||
)
|
)
|
||||||
# >= 10
|
# PG 10
|
||||||
|
elif self.get_version(node) > 100000 and self.get_version(node) < 110000:
|
||||||
|
node.safe_psql(
|
||||||
|
'backupdb',
|
||||||
|
'CREATE ROLE backup WITH LOGIN; '
|
||||||
|
'GRANT CONNECT ON DATABASE backupdb to backup; '
|
||||||
|
'GRANT USAGE ON SCHEMA pg_catalog TO backup; '
|
||||||
|
'GRANT USAGE ON SCHEMA public TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_am TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_class TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
||||||
|
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.charne("char", "char") TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup;'
|
||||||
|
)
|
||||||
|
# >= 11
|
||||||
else:
|
else:
|
||||||
node.safe_psql(
|
node.safe_psql(
|
||||||
'backupdb',
|
'backupdb',
|
||||||
@ -614,6 +640,7 @@ class CheckdbTest(ProbackupTest, unittest.TestCase):
|
|||||||
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_index TO backup; '
|
||||||
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
'GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; '
|
||||||
|
'GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.namene(name, name) TO backup; '
|
||||||
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
'GRANT EXECUTE ON FUNCTION pg_catalog.int8(integer) TO backup; '
|
||||||
|
@ -402,10 +402,12 @@ class PtrackTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
||||||
@ -434,10 +436,12 @@ class PtrackTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
@ -470,8 +474,10 @@ class PtrackTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
|
@ -4,7 +4,7 @@ from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta, timezone
|
||||||
import hashlib
|
import hashlib
|
||||||
import shutil
|
import shutil
|
||||||
import json
|
import json
|
||||||
@ -2140,7 +2140,8 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
|
|
||||||
target_name = 'savepoint'
|
target_name = 'savepoint'
|
||||||
|
|
||||||
target_time = datetime.now().astimezone().strftime("%Y-%m-%d %H:%M:%S %z")
|
# in python-3.6+ it can be ...now()..astimezone()...
|
||||||
|
target_time = datetime.utcnow().replace(tzinfo=timezone.utc).astimezone().strftime("%Y-%m-%d %H:%M:%S %z")
|
||||||
with node.connect("postgres") as con:
|
with node.connect("postgres") as con:
|
||||||
res = con.execute(
|
res = con.execute(
|
||||||
"INSERT INTO tbl0005 VALUES ('inserted') RETURNING (xmin)")
|
"INSERT INTO tbl0005 VALUES ('inserted') RETURNING (xmin)")
|
||||||
@ -2503,7 +2504,7 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
db_list_raw = node.safe_psql(
|
db_list_raw = node.safe_psql(
|
||||||
'postgres',
|
'postgres',
|
||||||
'SELECT to_json(a) '
|
'SELECT to_json(a) '
|
||||||
'FROM (SELECT oid, datname FROM pg_database) a').rstrip()
|
'FROM (SELECT oid, datname FROM pg_database) a').decode('utf-8').rstrip()
|
||||||
|
|
||||||
db_list_splitted = db_list_raw.splitlines()
|
db_list_splitted = db_list_raw.splitlines()
|
||||||
|
|
||||||
@ -2742,7 +2743,7 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
db_list_raw = node.safe_psql(
|
db_list_raw = node.safe_psql(
|
||||||
'postgres',
|
'postgres',
|
||||||
'SELECT to_json(a) '
|
'SELECT to_json(a) '
|
||||||
'FROM (SELECT oid, datname FROM pg_database) a').rstrip()
|
'FROM (SELECT oid, datname FROM pg_database) a').decode('utf-8').rstrip()
|
||||||
|
|
||||||
db_list_splitted = db_list_raw.splitlines()
|
db_list_splitted = db_list_raw.splitlines()
|
||||||
|
|
||||||
@ -3222,10 +3223,12 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
|
||||||
@ -3255,10 +3258,12 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.textout(text) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.timestamptz(timestamp with time zone, integer) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
@ -3292,8 +3297,10 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_proc TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
"GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; "
|
||||||
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
"GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; " # for partial restore, checkdb and ptrack
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.oideq(oid, oid) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.nameeq(name, name) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
|
||||||
|
"GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_system() TO backup; "
|
||||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
|
||||||
@ -3868,7 +3875,8 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
|||||||
# Clean after yourself
|
# Clean after yourself
|
||||||
self.del_test_dir(module_name, fname)
|
self.del_test_dir(module_name, fname)
|
||||||
|
|
||||||
# @unittest.skip("skip")
|
# skip this test until https://github.com/postgrespro/pg_probackup/pull/399
|
||||||
|
@unittest.skip("skip")
|
||||||
def test_restore_issue_313(self):
|
def test_restore_issue_313(self):
|
||||||
"""
|
"""
|
||||||
Check that partially restored PostgreSQL instance cannot be started
|
Check that partially restored PostgreSQL instance cannot be started
|
||||||
|
Reference in New Issue
Block a user