@@ -375,7 +375,8 @@ def test_merge_ptrack_truncate(self):
375375 'wal_level' : 'replica' ,
376376 'max_wal_senders' : '2' ,
377377 'checkpoint_timeout' : '300s' ,
378- 'autovacuum' : 'off'
378+ 'autovacuum' : 'off' ,
379+ 'ptrack_enable' : 'on'
379380 }
380381 )
381382 node_restored = self .make_simple_node (
@@ -410,7 +411,7 @@ def test_merge_ptrack_truncate(self):
410411 "vacuum t_heap" )
411412
412413 self .backup_node (
413- backup_dir , 'node' , node , backup_type = 'delta ' )
414+ backup_dir , 'node' , node , backup_type = 'ptrack ' )
414415
415416 if self .paranoia :
416417 pgdata = self .pgdata_content (node .data_dir )
@@ -452,3 +453,92 @@ def test_merge_ptrack_truncate(self):
452453
453454 # Clean after yourself
454455 self .del_test_dir (module_name , fname )
456+
457+ # @unittest.skip("skip")
458+ def test_merge_delta_delete (self ):
459+ """
460+ Make node, create tablespace with table, take full backup,
461+ alter tablespace location, take delta backup, restore database.
462+ """
463+ fname = self .id ().split ('.' )[3 ]
464+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
465+ node = self .make_simple_node (
466+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
467+ set_replication = True , initdb_params = ['--data-checksums' ],
468+ pg_options = {
469+ 'wal_level' : 'replica' ,
470+ 'max_wal_senders' : '2' ,
471+ 'checkpoint_timeout' : '30s' ,
472+ 'autovacuum' : 'off'
473+ }
474+ )
475+
476+ self .init_pb (backup_dir )
477+ self .add_instance (backup_dir , 'node' , node )
478+ self .set_archiving (backup_dir , 'node' , node )
479+ node .start ()
480+
481+ self .create_tblspace_in_node (node , 'somedata' )
482+
483+ # FULL backup
484+ self .backup_node (backup_dir , 'node' , node , options = ["--stream" ])
485+
486+ node .safe_psql (
487+ "postgres" ,
488+ "create table t_heap tablespace somedata as select i as id,"
489+ " md5(i::text) as text, md5(i::text)::tsvector as tsvector"
490+ " from generate_series(0,100) i"
491+ )
492+
493+ node .safe_psql (
494+ "postgres" ,
495+ "delete from t_heap"
496+ )
497+
498+ node .safe_psql (
499+ "postgres" ,
500+ "vacuum t_heap"
501+ )
502+
503+ # DELTA BACKUP
504+ self .backup_node (
505+ backup_dir , 'node' , node ,
506+ backup_type = 'delta' ,
507+ options = ["--stream" ]
508+ )
509+
510+ if self .paranoia :
511+ pgdata = self .pgdata_content (node .data_dir )
512+
513+ backup_id = self .show_pb (backup_dir , "node" )[1 ]["id" ]
514+ self .merge_backup (backup_dir , "node" , backup_id )
515+
516+ # RESTORE
517+ node_restored = self .make_simple_node (
518+ base_dir = "{0}/{1}/node_restored" .format (module_name , fname )
519+ )
520+ node_restored .cleanup ()
521+
522+ self .restore_node (
523+ backup_dir , 'node' , node_restored ,
524+ options = [
525+ "-j" , "4" ,
526+ "-T" , "{0}={1}" .format (
527+ self .get_tblspace_path (node , 'somedata' ),
528+ self .get_tblspace_path (node_restored , 'somedata' )
529+ )
530+ ]
531+ )
532+
533+ # GET RESTORED PGDATA AND COMPARE
534+ if self .paranoia :
535+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
536+ self .compare_pgdata (pgdata , pgdata_restored )
537+
538+ # START RESTORED NODE
539+ node_restored .append_conf (
540+ 'postgresql.auto.conf' , 'port = {0}' .format (node_restored .port ))
541+ node_restored .start ()
542+
543+ # Clean after yourself
544+ self .del_test_dir (module_name , fname )
0 commit comments