@@ -1041,7 +1041,8 @@ def test_page_vacuum_truncate(self):
10411041"postgres" ,
10421042"vacuum t_heap" )
10431043
1044- self .backup_node (backup_dir ,'node' ,node ,old_binary = True )
1044+ id1 = self .backup_node (backup_dir ,'node' ,node ,old_binary = True )
1045+ pgdata1 = self .pgdata_content (node .data_dir )
10451046
10461047node .safe_psql (
10471048"postgres" ,
@@ -1051,8 +1052,9 @@ def test_page_vacuum_truncate(self):
10511052"postgres" ,
10521053"vacuum t_heap" )
10531054
1054- self .backup_node (
1055+ id2 = self .backup_node (
10551056backup_dir ,'node' ,node ,backup_type = 'page' ,old_binary = True )
1057+ pgdata2 = self .pgdata_content (node .data_dir )
10561058
10571059node .safe_psql (
10581060"postgres" ,
@@ -1061,23 +1063,49 @@ def test_page_vacuum_truncate(self):
10611063"md5(repeat(i::text,10))::tsvector as tsvector "
10621064"from generate_series(0,1) i" )
10631065
1064- self .backup_node (
1066+ id3 = self .backup_node (
10651067backup_dir ,'node' ,node ,backup_type = 'page' ,old_binary = True )
1066-
1067- pgdata = self .pgdata_content (node .data_dir )
1068+ pgdata3 = self .pgdata_content (node .data_dir )
10681069
10691070node_restored = self .make_simple_node (
10701071base_dir = os .path .join (module_name ,fname ,'node_restored' ))
10711072node_restored .cleanup ()
10721073
1073- self .restore_node (backup_dir ,'node' ,node_restored )
1074+ self .restore_node (
1075+ backup_dir ,'node' ,node_restored ,
1076+ data_dir = node_restored .data_dir ,backup_id = id1 )
10741077
10751078# Physical comparison
10761079pgdata_restored = self .pgdata_content (node_restored .data_dir )
1077- self .compare_pgdata (pgdata ,pgdata_restored )
1080+ self .compare_pgdata (pgdata1 ,pgdata_restored )
10781081
10791082self .set_auto_conf (node_restored , {'port' :node_restored .port })
10801083node_restored .slow_start ()
1084+ node_restored .cleanup ()
1085+
1086+ self .restore_node (
1087+ backup_dir ,'node' ,node_restored ,
1088+ data_dir = node_restored .data_dir ,backup_id = id2 )
1089+
1090+ # Physical comparison
1091+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1092+ self .compare_pgdata (pgdata2 ,pgdata_restored )
1093+
1094+ self .set_auto_conf (node_restored , {'port' :node_restored .port })
1095+ node_restored .slow_start ()
1096+ node_restored .cleanup ()
1097+
1098+ self .restore_node (
1099+ backup_dir ,'node' ,node_restored ,
1100+ data_dir = node_restored .data_dir ,backup_id = id3 )
1101+
1102+ # Physical comparison
1103+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1104+ self .compare_pgdata (pgdata3 ,pgdata_restored )
1105+
1106+ self .set_auto_conf (node_restored , {'port' :node_restored .port })
1107+ node_restored .slow_start ()
1108+ node_restored .cleanup ()
10811109
10821110# Clean after yourself
10831111self .del_test_dir (module_name ,fname )
@@ -1162,6 +1190,115 @@ def test_page_vacuum_truncate_compression(self):
11621190# Clean after yourself
11631191self .del_test_dir (module_name ,fname )
11641192
1193+ # @unittest.skip("skip")
1194+ def test_page_vacuum_truncate_compressed_1 (self ):
1195+ """
1196+ make node, create table, take full backup,
1197+ delete all data, vacuum relation,
1198+ take page backup, insert some data,
1199+ take second page backup,
1200+ restore latest page backup using new binary
1201+ and check data correctness
1202+ old binary should be 2.2.x version
1203+ """
1204+ fname = self .id ().split ('.' )[3 ]
1205+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
1206+ node = self .make_simple_node (
1207+ base_dir = os .path .join (module_name ,fname ,'node' ),
1208+ set_replication = True ,
1209+ initdb_params = ['--data-checksums' ],
1210+ pg_options = {'autovacuum' :'off' })
1211+
1212+ self .init_pb (backup_dir ,old_binary = True )
1213+ self .add_instance (backup_dir ,'node' ,node ,old_binary = True )
1214+ self .set_archiving (backup_dir ,'node' ,node ,old_binary = True )
1215+ node .slow_start ()
1216+
1217+ node .safe_psql (
1218+ "postgres" ,
1219+ "create sequence t_seq; "
1220+ "create table t_heap as select i as id, "
1221+ "md5(i::text) as text, "
1222+ "md5(repeat(i::text,10))::tsvector as tsvector "
1223+ "from generate_series(0,1024) i" )
1224+
1225+ node .safe_psql (
1226+ "postgres" ,
1227+ "vacuum t_heap" )
1228+
1229+ id1 = self .backup_node (
1230+ backup_dir ,'node' ,node ,
1231+ old_binary = True ,options = ['--compress' ])
1232+ pgdata1 = self .pgdata_content (node .data_dir )
1233+
1234+ node .safe_psql (
1235+ "postgres" ,
1236+ "delete from t_heap" )
1237+
1238+ node .safe_psql (
1239+ "postgres" ,
1240+ "vacuum t_heap" )
1241+
1242+ id2 = self .backup_node (
1243+ backup_dir ,'node' ,node ,backup_type = 'page' ,
1244+ old_binary = True ,options = ['--compress' ])
1245+ pgdata2 = self .pgdata_content (node .data_dir )
1246+
1247+ node .safe_psql (
1248+ "postgres" ,
1249+ "insert into t_heap select i as id, "
1250+ "md5(i::text) as text, "
1251+ "md5(repeat(i::text,10))::tsvector as tsvector "
1252+ "from generate_series(0,1) i" )
1253+
1254+ id3 = self .backup_node (
1255+ backup_dir ,'node' ,node ,backup_type = 'page' ,
1256+ old_binary = True ,options = ['--compress' ])
1257+ pgdata3 = self .pgdata_content (node .data_dir )
1258+
1259+ node_restored = self .make_simple_node (
1260+ base_dir = os .path .join (module_name ,fname ,'node_restored' ))
1261+ node_restored .cleanup ()
1262+
1263+ self .restore_node (
1264+ backup_dir ,'node' ,node_restored ,
1265+ data_dir = node_restored .data_dir ,backup_id = id1 )
1266+
1267+ # Physical comparison
1268+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1269+ self .compare_pgdata (pgdata1 ,pgdata_restored )
1270+
1271+ self .set_auto_conf (node_restored , {'port' :node_restored .port })
1272+ node_restored .slow_start ()
1273+ node_restored .cleanup ()
1274+
1275+ self .restore_node (
1276+ backup_dir ,'node' ,node_restored ,
1277+ data_dir = node_restored .data_dir ,backup_id = id2 )
1278+
1279+ # Physical comparison
1280+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1281+ self .compare_pgdata (pgdata2 ,pgdata_restored )
1282+
1283+ self .set_auto_conf (node_restored , {'port' :node_restored .port })
1284+ node_restored .slow_start ()
1285+ node_restored .cleanup ()
1286+
1287+ self .restore_node (
1288+ backup_dir ,'node' ,node_restored ,
1289+ data_dir = node_restored .data_dir ,backup_id = id3 )
1290+
1291+ # Physical comparison
1292+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1293+ self .compare_pgdata (pgdata3 ,pgdata_restored )
1294+
1295+ self .set_auto_conf (node_restored , {'port' :node_restored .port })
1296+ node_restored .slow_start ()
1297+ node_restored .cleanup ()
1298+
1299+ # Clean after yourself
1300+ self .del_test_dir (module_name ,fname )
1301+
11651302# @unittest.skip("skip")
11661303def test_hidden_files (self ):
11671304"""