1- -- ########## NATIVE ID PARENT / TIME SUBPARENT TESTS ##########
1+ -- ########## ID PARENT / TIME SUBPARENT TESTS ##########
22-- Additional tests: no pg_jobmon
33 -- Test using a pre-created template table and passing to create_parent. Should allow indexes to be made for initial children.
4- -- additional constraint column
4+ -- additional constraint column (top lvl int)
55
66\set ON_ERROR_ROLLBACK 1
77\set ON_ERROR_STOP true
88
99BEGIN ;
1010SELECT set_config(' search_path' ,' partman, public' ,false);
1111
12- SELECT plan(323 );
12+ SELECT plan(321 );
1313CREATE SCHEMA partman_test ;
1414
1515CREATE TABLE partman_test .fk_test_reference (col2 text unique not null );
@@ -31,7 +31,7 @@ ALTER TABLE partman_test.template_id_taptest_table ADD PRIMARY KEY (col1);
3131CREATE INDEX ON partman_test .id_taptest_table (col3);
3232ALTER TABLE partman_test .id_taptest_table ADD FOREIGN KEY (col2) REFERENCES partman_test .fk_test_reference (col2);
3333
34- SELECT create_parent(' partman_test.id_taptest_table' , ' col1' , ' 10' , p_constraint_cols => ' {"col3 "}' , p_jobmon => false, p_template_table => ' partman_test.template_id_taptest_table' );
34+ SELECT create_parent(' partman_test.id_taptest_table' , ' col1' , ' 10' , p_constraint_cols => ' {"col2 "}' , p_jobmon => false, p_template_table => ' partman_test.template_id_taptest_table' );
3535INSERT INTO partman_test .id_taptest_table (col1) VALUES (generate_series(1 ,9 ));
3636
3737SELECT is_partitioned(' partman_test' , ' id_taptest_table' , ' Check that id_taptest_table is natively partitioned' );
@@ -295,6 +295,7 @@ SELECT is_empty('SELECT * FROM partman_test.id_taptest_table_p40', 'Check count
295295INSERT INTO partman_test .id_taptest_table (col1, col3) VALUES (generate_series(10 ,20 ), CURRENT_TIMESTAMP + ' 1 day' ::interval);
296296
297297SELECT run_maintenance();
298+
298299SELECT is_empty(' SELECT * FROM ONLY partman_test.id_taptest_table_default' , ' Check that top parent default is empty' );
299300SELECT is_empty(' SELECT * FROM ONLY partman_test.id_taptest_table_p0_default' , ' Check that subparent default p0 is empty' );
300301SELECT results_eq(' SELECT count(*)::int FROM partman_test.id_taptest_table_p0' , ARRAY[9 ], ' Check count from parent table partman_test.id_taptest_table_p0' );
@@ -387,7 +388,6 @@ SELECT is_empty('SELECT * FROM partman_test.id_taptest_table_p60', 'Check count
387388
388389SELECT hasnt_table(' partman_test' , ' id_taptest_table_p70' , ' Check id_taptest_table_p70 doesn' ' t exists yet' );
389390
390- -- Ensure time partitioning works for all sub partitions
391391UPDATE part_config SET premake = 5 WHERE parent_table ~ ' partman_test.id_taptest_table_p' ;
392392SELECT run_maintenance();
393393
@@ -448,6 +448,14 @@ SELECT hasnt_table('partman_test', 'id_taptest_table_p50_p'||to_char(CURRENT_TIM
448448SELECT hasnt_table(' partman_test' , ' id_taptest_table_p60_p' || to_char(CURRENT_TIMESTAMP + ' 5 days' ::interval, ' YYYYMMDD' ),
449449 ' Check id_taptest_table_p60_p' || to_char(CURRENT_TIMESTAMP + ' 5 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
450450
451+ -- Ensure constraint exclusion for top level. Latest data is in _p5, so optimize_constraint of 4 would be before _p1
452+ INSERT INTO partman_test .id_taptest_table (col1, col3) VALUES (generate_series(30 ,50 ), CURRENT_TIMESTAMP + ' 1 day' ::interval);
453+ UPDATE partman .part_config SET optimize_constraint = 4 WHERE parent_table = ' partman_test.id_taptest_table' ;
454+
455+ SELECT run_maintenance();
456+ SELECT col_has_check(' partman_test' , ' id_taptest_table_p0' , ' col2'
457+ , ' Check for additional constraint on col2 on id_taptest_table_p0' );
458+
451459-- Test dropping without retention set
452460SELECT drop_partition_time (' partman_test.id_taptest_table_p0' , ' 2 days' , p_keep_table := false);
453461SELECT has_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 2 days' ::interval, ' YYYYMMDD' ),
@@ -462,7 +470,7 @@ SELECT hasnt_table('partman_test', 'id_taptest_table_p0_p'||to_char(CURRENT_TIME
462470 ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 6 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
463471
464472
465- UPDATE part_config SET retention = ' 10 ' , retention_keep_table = false WHERE parent_table = ' partman_test.id_taptest_table' ;
473+ UPDATE part_config SET retention = ' 30 ' , retention_keep_table = false WHERE parent_table = ' partman_test.id_taptest_table' ;
466474UPDATE part_config SET retention = ' 2 days' , retention_keep_table = false WHERE parent_table = ' partman_test.id_taptest_table_p0' ;
467475UPDATE part_config SET retention = ' 2 days' , retention_keep_table = false WHERE parent_table = ' partman_test.id_taptest_table_p10' ;
468476UPDATE part_config SET retention = ' 2 days' , retention_keep_table = false WHERE parent_table = ' partman_test.id_taptest_table_p20' ;
@@ -475,31 +483,19 @@ UPDATE part_config SET retention = '2 days', retention_keep_table = false WHERE
475483
476484SELECT run_maintenance();
477485
486+ SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0' ,
487+ ' Check id_taptest_table_p0 does not exist' );
478488SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' ),
479489 ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' )|| ' does not exist' );
480490SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 1 day' ::interval, ' YYYYMMDD' ),
481491 ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 1 day' ::interval, ' YYYYMMDD' )|| ' does not exist' );
482- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 2 days' ::interval, ' YYYYMMDD' ),
483- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 2 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
484- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 3 days' ::interval, ' YYYYMMDD' ),
485- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 3 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
486- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 4 days' ::interval, ' YYYYMMDD' ),
487- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 4 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
488- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 5 days' ::interval, ' YYYYMMDD' ),
489- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP + ' 5 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
490- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 1 days' ::interval, ' YYYYMMDD' ),
491- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 1 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
492- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 2 days' ::interval, ' YYYYMMDD' ),
493- ' Check id_taptest_table_p0_p' || to_char(CURRENT_TIMESTAMP - ' 2 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
494492
493+ SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10' ,
494+ ' Check id_taptest_table_p10 does not exist' );
495+ SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' ),
496+ ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' )|| ' does not exist' );
495497SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 3 days' ::interval, ' YYYYMMDD' ),
496498 ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 3 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
497- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 4 days' ::interval, ' YYYYMMDD' ),
498- ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 4 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
499- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 5 days' ::interval, ' YYYYMMDD' ),
500- ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 5 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
501- SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 6 days' ::interval, ' YYYYMMDD' ),
502- ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP - ' 6 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
503499
504500SELECT hasnt_table(' partman_test' , ' id_taptest_table_p20_p' || to_char(CURRENT_TIMESTAMP - ' 3 days' ::interval, ' YYYYMMDD' ),
505501 ' Check id_taptest_table_p20_p' || to_char(CURRENT_TIMESTAMP - ' 3 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
@@ -546,7 +542,6 @@ SELECT hasnt_table('partman_test', 'id_taptest_table_p60_p'||to_char(CURRENT_TIM
546542SELECT hasnt_table(' partman_test' , ' id_taptest_table_p60_p' || to_char(CURRENT_TIMESTAMP - ' 6 days' ::interval, ' YYYYMMDD' ),
547543 ' Check id_taptest_table_p60_p' || to_char(CURRENT_TIMESTAMP - ' 6 days' ::interval, ' YYYYMMDD' )|| ' does not exist' );
548544
549- SELECT undo_partition(' partman_test.id_taptest_table_p10' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
550545SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
551546SELECT undo_partition(' partman_test.id_taptest_table_p20' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
552547SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
@@ -558,9 +553,15 @@ SELECT undo_partition('partman_test.id_taptest_table_p50', p_target_table := 'pa
558553SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
559554SELECT undo_partition(' partman_test.id_taptest_table_p60' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
560555SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
556+ SELECT undo_partition(' partman_test.id_taptest_table_p70' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
557+ SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
558+ SELECT undo_partition(' partman_test.id_taptest_table_p80' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
559+ SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
560+ SELECT undo_partition(' partman_test.id_taptest_table_p90' , p_target_table := ' partman_test.undo_taptest' , p_loop_count => 20 , p_keep_table := false);
561+ SELECT has_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was not removed yet' );
561562
562563
563- SELECT results_eq(' SELECT count(*)::int FROM partman_test.undo_taptest' , ARRAY[11 ], ' Check count from target of undo_partition' );
564+ SELECT results_eq(' SELECT count(*)::int FROM partman_test.undo_taptest' , ARRAY[22 ], ' Check count from target of undo_partition' );
564565
565566SELECT hasnt_table(' partman_test' , ' id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' ),
566567 ' Check id_taptest_table_p10_p' || to_char(CURRENT_TIMESTAMP , ' YYYYMMDD' )|| ' does not exist' );
@@ -698,7 +699,7 @@ SELECT is_empty('SELECT parent_table from part_config where parent_table = ''par
698699
699700SELECT hasnt_table(' partman_test' , ' template_id_taptest_table' , ' Check that template table was removed' );
700701
701- SELECT results_eq(' SELECT count(*)::int FROM ONLY partman_test.undo_taptest' , ARRAY[11 ], ' Check count from final unpartitioned target table' );
702+ SELECT results_eq(' SELECT count(*)::int FROM ONLY partman_test.undo_taptest' , ARRAY[22 ], ' Check count from final unpartitioned target table' );
702703
703704SELECT * FROM finish();
704705ROLLBACK ;
0 commit comments