@@ -1041,7 +1041,8 @@ def test_page_vacuum_truncate(self):
1041
1041
"postgres" ,
1042
1042
"vacuum t_heap" )
1043
1043
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 )
1045
1046
1046
1047
node .safe_psql (
1047
1048
"postgres" ,
@@ -1051,8 +1052,9 @@ def test_page_vacuum_truncate(self):
1051
1052
"postgres" ,
1052
1053
"vacuum t_heap" )
1053
1054
1054
- self .backup_node (
1055
+ id2 = self .backup_node (
1055
1056
backup_dir , 'node' , node , backup_type = 'page' , old_binary = True )
1057
+ pgdata2 = self .pgdata_content (node .data_dir )
1056
1058
1057
1059
node .safe_psql (
1058
1060
"postgres" ,
@@ -1061,23 +1063,49 @@ def test_page_vacuum_truncate(self):
1061
1063
"md5(repeat(i::text,10))::tsvector as tsvector "
1062
1064
"from generate_series(0,1) i" )
1063
1065
1064
- self .backup_node (
1066
+ id3 = self .backup_node (
1065
1067
backup_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 )
1068
1069
1069
1070
node_restored = self .make_simple_node (
1070
1071
base_dir = os .path .join (module_name , fname , 'node_restored' ))
1071
1072
node_restored .cleanup ()
1072
1073
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 )
1074
1077
1075
1078
# Physical comparison
1076
1079
pgdata_restored = self .pgdata_content (node_restored .data_dir )
1077
- self .compare_pgdata (pgdata , pgdata_restored )
1080
+ self .compare_pgdata (pgdata1 , pgdata_restored )
1078
1081
1079
1082
self .set_auto_conf (node_restored , {'port' : node_restored .port })
1080
1083
node_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 ()
1081
1109
1082
1110
# Clean after yourself
1083
1111
self .del_test_dir (module_name , fname )
@@ -1162,6 +1190,115 @@ def test_page_vacuum_truncate_compression(self):
1162
1190
# Clean after yourself
1163
1191
self .del_test_dir (module_name , fname )
1164
1192
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
+
1165
1302
# @unittest.skip("skip")
1166
1303
def test_hidden_files (self ):
1167
1304
"""
0 commit comments