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;
|
||||
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.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_start_backup(text, boolean) TO backup;
|
||||
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup;
|
||||
@ -624,6 +625,7 @@ BEGIN;
|
||||
CREATE ROLE backup WITH LOGIN;
|
||||
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.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_start_backup(text, boolean, 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;
|
||||
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.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_start_backup(text, 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;
|
||||
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.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_start_backup(text, 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_extension TO backup; "
|
||||
"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.textout(text) 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.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_start_backup(text, boolean) 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_proc TO backup; "
|
||||
"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.textout(text) 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.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_control_system() 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_extension TO backup; "
|
||||
"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.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_control_system() 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:
|
||||
node.safe_psql(
|
||||
"backupdb",
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup")
|
||||
|
||||
node.safe_psql(
|
||||
"backupdb",
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup; "
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
||||
|
||||
sleep(2)
|
||||
@ -3270,9 +3273,11 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
||||
"\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException as e:
|
||||
self.assertIn(
|
||||
"FATAL: must be superuser or replication role to start walsender",
|
||||
# 9.5: ERROR: must be superuser or replication role to run a backup
|
||||
# >=9.6: FATAL: must be superuser or replication role to start walsender
|
||||
self.assertRegex(
|
||||
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(
|
||||
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_stop_backup() 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
|
||||
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
|
||||
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_last_xlog_replay_location() 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
|
||||
else:
|
||||
node.safe_psql(
|
||||
@ -3381,10 +3388,7 @@ class BackupTest(ProbackupTest, unittest.TestCase):
|
||||
if ProbackupTest.enterprise:
|
||||
node.safe_psql(
|
||||
"backupdb",
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup")
|
||||
|
||||
node.safe_psql(
|
||||
"backupdb",
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_edition() TO backup; "
|
||||
"GRANT EXECUTE ON FUNCTION pg_catalog.pgpro_version() TO backup")
|
||||
|
||||
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',
|
||||
output)
|
||||
|
||||
self.assertIn(
|
||||
'WARNING: could not connect to database backupdb: FATAL: must be superuser or replication role to start walsender',
|
||||
output)
|
||||
# Messages before 14
|
||||
# 'WARNING: could not connect to database backupdb: FATAL: must be superuser or replication role to start walsender'
|
||||
# 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
|
||||
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_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; '
|
||||
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;'
|
||||
'GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;' # amcheck-next function
|
||||
)
|
||||
# PG 9.6
|
||||
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_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; '
|
||||
@ -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, 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:
|
||||
node.safe_psql(
|
||||
'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_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; '
|
||||
|
@ -402,10 +402,12 @@ class PtrackTest(ProbackupTest, unittest.TestCase):
|
||||
"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_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.textout(text) 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.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_start_backup(text, boolean) 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 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 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.textout(text) 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.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_control_system() 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 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 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.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_control_system() 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 sys
|
||||
from time import sleep
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import hashlib
|
||||
import shutil
|
||||
import json
|
||||
@ -2140,7 +2140,8 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
||||
|
||||
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:
|
||||
res = con.execute(
|
||||
"INSERT INTO tbl0005 VALUES ('inserted') RETURNING (xmin)")
|
||||
@ -2503,7 +2504,7 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
||||
db_list_raw = node.safe_psql(
|
||||
'postgres',
|
||||
'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()
|
||||
|
||||
@ -2742,7 +2743,7 @@ class RestoreTest(ProbackupTest, unittest.TestCase):
|
||||
db_list_raw = node.safe_psql(
|
||||
'postgres',
|
||||
'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()
|
||||
|
||||
@ -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_extension TO backup; "
|
||||
"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.textout(text) 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.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_start_backup(text, boolean) 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_extension TO backup; "
|
||||
"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.textout(text) 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.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_control_system() 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_extension TO backup; "
|
||||
"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.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_control_system() 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
|
||||
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):
|
||||
"""
|
||||
Check that partially restored PostgreSQL instance cannot be started
|
||||
|
Reference in New Issue
Block a user