@@ -657,6 +657,112 @@ def test_multiple_segments(self):
657657 self .assertEqual (page_result , self .node .safe_psql ("postgres" , "SELECT * FROM t_heap" ), 'Lost data after restore' )
658658
659659
660+ # @unittest.expectedFailure
661+ # @unittest.skip("skip")
662+ def test_multiple_segments_in_multiple_tablespaces (self ):
663+ """
664+ Case: Make full backup before created table in the tablespace.
665+ Make ptrack backup after create table.
666+ Check: incremental backup will not greater as full
667+ """
668+ tblspace_name_1 = 'tblspace_name_1'
669+ tblspace_name_2 = 'tblspace_name_2'
670+
671+ self .create_tblspace_in_node (self .node , tblspace_name_1 , True )
672+ self .create_tblspace_in_node (self .node , tblspace_name_2 , True )
673+
674+ self .node .safe_psql (
675+ "postgres" ,
676+ "CREATE TABLE {0} TABLESPACE {1} \
677+ AS SELECT i AS id, MD5(i::text) AS text, \
678+ MD5(repeat(i::text,10))::tsvector AS tsvector \
679+ FROM generate_series(0,10050000) i" .format ('t_heap_1' , tblspace_name_1 )
680+ )
681+
682+ self .node .safe_psql (
683+ "postgres" ,
684+ "CREATE TABLE {0} TABLESPACE {1} \
685+ AS SELECT i AS id, MD5(i::text) AS text, \
686+ MD5(repeat(i::text,10))::tsvector AS tsvector \
687+ FROM generate_series(0,10050000) i" .format ('t_heap_2' , tblspace_name_2 )
688+ )
689+
690+ full_result_1 = self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_1" )
691+ full_result_2 = self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_2" )
692+
693+ try :
694+ backup_id_full = self .backup_node (self .backup_dir , 'node' , self .node , backup_type = 'full' )
695+ except ProbackupException as e :
696+ self .fail (
697+ "ERROR: Full backup failed.\n {0} \n {1}" .format (
698+ repr (self .cmd ),
699+ repr (e .message )
700+ )
701+ )
702+
703+ self .node .safe_psql (
704+ "postgres" ,
705+ 'INSERT INTO {0} \
706+ SELECT i AS id, MD5(i::text) AS text, \
707+ MD5(repeat(i::text,10))::tsvector AS tsvector \
708+ FROM generate_series(0,10050000) i' .format ('t_heap_1' )
709+ )
710+
711+ self .node .safe_psql (
712+ "postgres" ,
713+ 'INSERT INTO {0} \
714+ SELECT i AS id, MD5(i::text) AS text, \
715+ MD5(repeat(i::text,10))::tsvector AS tsvector \
716+ FROM generate_series(0,10050000) i' .format ('t_heap_2' )
717+ )
718+
719+ page_result_1 = self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_1" )
720+ page_result_2 = self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_2" )
721+
722+ try :
723+ backup_id_page = self .backup_node (self .backup_dir , 'node' , self .node , backup_type = 'page' )
724+ except ProbackupException as e :
725+ self .fail (
726+ "ERROR: Incremental backup failed.\n {0} \n {1}" .format (
727+ repr (self .cmd ),
728+ repr (e .message )
729+ )
730+ )
731+
732+ show_backup_full = self .show_pb (self .backup_dir , 'node' , backup_id_full )
733+ show_backup_page = self .show_pb (self .backup_dir , 'node' , backup_id_page )
734+ self .assertGreater (
735+ show_backup_page ["data-bytes" ],
736+ show_backup_full ["data-bytes" ],
737+ "ERROR: Size of incremental backup greater as full. \n INFO: {0} >{1}" .format (
738+ show_backup_page ["data-bytes" ],
739+ show_backup_full ["data-bytes" ]
740+ )
741+ )
742+
743+ # CHECK FULL BACKUP
744+ self .node .stop ()
745+ self .node .cleanup ()
746+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name ), ignore_errors = True )
747+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name_1 ), ignore_errors = True )
748+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name_2 ), ignore_errors = True )
749+ self .restore_node (self .backup_dir , 'node' , self .node , backup_id = backup_id_full , options = ["-j" , "4" ])
750+ self .node .start ()
751+ self .assertEqual (full_result_1 , self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_1" ), 'Lost data after restore' )
752+ self .assertEqual (full_result_2 , self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_2" ), 'Lost data after restore' )
753+
754+ # CHECK PAGE BACKUP
755+ self .node .stop ()
756+ self .node .cleanup ()
757+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name ), ignore_errors = True )
758+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name_1 ), ignore_errors = True )
759+ shutil .rmtree (self .get_tblspace_path (self .node , tblspace_name_2 ), ignore_errors = True )
760+ self .restore_node (self .backup_dir , 'node' , self .node , backup_id = backup_id_page , options = ["-j" , "4" ])
761+ self .node .start ()
762+ self .assertEqual (page_result_1 , self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_1" ), 'Lost data after restore' )
763+ self .assertEqual (page_result_2 , self .node .safe_psql ("postgres" , "SELECT * FROM t_heap_2" ), 'Lost data after restore' )
764+
765+
660766 # @unittest.expectedFailure
661767 # @unittest.skip("skip")
662768 def test_fullbackup_after_create_table_page_after_create_table_stream (self ):
0 commit comments