@@ -12,8 +12,8 @@ SELECT pathman.create_hash_partitions('test.hash_rel', 'value', 3);
12
12
ERROR: Partitioning key 'value' must be NOT NULL
13
13
ALTER TABLE test.hash_rel ALTER COLUMN value SET NOT NULL;
14
14
SELECT pathman.create_hash_partitions('test.hash_rel', 'Value', 3);
15
- NOTICE: function test.hash_rel_hash_insert_trigger_func () does not exist, skipping
16
- NOTICE: function test.hash_rel_hash_update_trigger_func () does not exist, skipping
15
+ NOTICE: function test.hash_rel_insert_trigger_func () does not exist, skipping
16
+ NOTICE: function test.hash_rel_update_trigger_func () does not exist, skipping
17
17
NOTICE: Copying data to partitions...
18
18
create_hash_partitions
19
19
------------------------
@@ -340,6 +340,26 @@ EXPLAIN (COSTS OFF) SELECT * FROM test.num_range_rel WHERE (id >= 500 AND id < 1
340
340
-> Seq Scan on num_range_rel_4
341
341
(8 rows)
342
342
343
+ EXPLAIN (COSTS OFF) SELECT * FROM test.num_range_rel ORDER BY id;
344
+ QUERY PLAN
345
+ ----------------------------------------------------------------
346
+ Append
347
+ -> Index Scan using num_range_rel_1_pkey on num_range_rel_1
348
+ -> Index Scan using num_range_rel_2_pkey on num_range_rel_2
349
+ -> Index Scan using num_range_rel_3_pkey on num_range_rel_3
350
+ -> Index Scan using num_range_rel_4_pkey on num_range_rel_4
351
+ (5 rows)
352
+
353
+ EXPLAIN (COSTS OFF) SELECT * FROM test.num_range_rel WHERE id <= 2500 ORDER BY id;
354
+ QUERY PLAN
355
+ ----------------------------------------------------------------
356
+ Append
357
+ -> Index Scan using num_range_rel_1_pkey on num_range_rel_1
358
+ -> Index Scan using num_range_rel_2_pkey on num_range_rel_2
359
+ -> Index Scan using num_range_rel_3_pkey on num_range_rel_3
360
+ Index Cond: (id <= 2500)
361
+ (5 rows)
362
+
343
363
EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt > '2015-02-15';
344
364
QUERY PLAN
345
365
------------------------------------------------------------------------------------
@@ -380,6 +400,138 @@ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE (dt >= '2015-01-15' AND d
380
400
-> Seq Scan on range_rel_4
381
401
(8 rows)
382
402
403
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel ORDER BY dt;
404
+ QUERY PLAN
405
+ ----------------------------------------------------------
406
+ Append
407
+ -> Index Scan using range_rel_1_dt_idx on range_rel_1
408
+ -> Index Scan using range_rel_2_dt_idx on range_rel_2
409
+ -> Index Scan using range_rel_3_dt_idx on range_rel_3
410
+ -> Index Scan using range_rel_4_dt_idx on range_rel_4
411
+ (5 rows)
412
+
413
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt >= '2015-01-15' ORDER BY dt DESC;
414
+ QUERY PLAN
415
+ -------------------------------------------------------------------------------------
416
+ Append
417
+ -> Index Scan Backward using range_rel_4_dt_idx on range_rel_4
418
+ -> Index Scan Backward using range_rel_3_dt_idx on range_rel_3
419
+ -> Index Scan Backward using range_rel_2_dt_idx on range_rel_2
420
+ -> Index Scan Backward using range_rel_1_dt_idx on range_rel_1
421
+ Index Cond: (dt >= 'Thu Jan 15 00:00:00 2015'::timestamp without time zone)
422
+ (6 rows)
423
+
424
+ /*
425
+ * Sorting
426
+ */
427
+ SET enable_indexscan = OFF;
428
+ SET enable_seqscan = ON;
429
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt < '2015-03-01' ORDER BY dt;
430
+ QUERY PLAN
431
+ -------------------------------------
432
+ Sort
433
+ Sort Key: range_rel_1.dt
434
+ -> Append
435
+ -> Seq Scan on range_rel_1
436
+ -> Seq Scan on range_rel_2
437
+ (5 rows)
438
+
439
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.range_rel_2 ORDER BY dt;
440
+ QUERY PLAN
441
+ -------------------------------------
442
+ Sort
443
+ Sort Key: range_rel_1.dt
444
+ -> Append
445
+ -> Seq Scan on range_rel_1
446
+ -> Seq Scan on range_rel_2
447
+ (5 rows)
448
+
449
+ SET enable_indexscan = ON;
450
+ SET enable_seqscan = OFF;
451
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt < '2015-03-01' ORDER BY dt;
452
+ QUERY PLAN
453
+ ----------------------------------------------------------
454
+ Append
455
+ -> Index Scan using range_rel_1_dt_idx on range_rel_1
456
+ -> Index Scan using range_rel_2_dt_idx on range_rel_2
457
+ (3 rows)
458
+
459
+ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.range_rel_2 ORDER BY dt;
460
+ QUERY PLAN
461
+ ----------------------------------------------------------
462
+ Merge Append
463
+ Sort Key: range_rel_1.dt
464
+ -> Index Scan using range_rel_1_dt_idx on range_rel_1
465
+ -> Index Scan using range_rel_2_dt_idx on range_rel_2
466
+ (4 rows)
467
+
468
+ /*
469
+ * Join
470
+ */
471
+ SET enable_hashjoin = OFF;
472
+ SET enable_mergejoin = ON;
473
+ EXPLAIN (COSTS OFF)
474
+ SELECT * FROM test.range_rel j1
475
+ JOIN test.range_rel j2 on j2.id = j1.id
476
+ JOIN test.num_range_rel j3 on j3.id = j1.id
477
+ WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
478
+ QUERY PLAN
479
+ -------------------------------------------------------------------------------------------
480
+ Sort
481
+ Sort Key: j2.dt
482
+ -> Merge Join
483
+ Merge Cond: (j3.id = j2.id)
484
+ -> Append
485
+ -> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
486
+ -> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
487
+ -> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
488
+ -> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
489
+ -> Materialize
490
+ -> Merge Join
491
+ Merge Cond: (j2.id = j1.id)
492
+ -> Merge Append
493
+ Sort Key: j2.id
494
+ -> Index Scan using range_rel_2_pkey on range_rel_2 j2
495
+ -> Index Scan using range_rel_3_pkey on range_rel_3 j2_1
496
+ -> Index Scan using range_rel_4_pkey on range_rel_4 j2_2
497
+ -> Materialize
498
+ -> Merge Append
499
+ Sort Key: j1.id
500
+ -> Index Scan using range_rel_1_pkey on range_rel_1 j1
501
+ -> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
502
+ (22 rows)
503
+
504
+ SET enable_hashjoin = ON;
505
+ SET enable_mergejoin = OFF;
506
+ EXPLAIN (COSTS OFF)
507
+ SELECT * FROM test.range_rel j1
508
+ JOIN test.range_rel j2 on j2.id = j1.id
509
+ JOIN test.num_range_rel j3 on j3.id = j1.id
510
+ WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
511
+ QUERY PLAN
512
+ -------------------------------------------------------------------------------------------
513
+ Sort
514
+ Sort Key: j2.dt
515
+ -> Hash Join
516
+ Hash Cond: (j3.id = j2.id)
517
+ -> Append
518
+ -> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
519
+ -> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
520
+ -> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
521
+ -> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
522
+ -> Hash
523
+ -> Hash Join
524
+ Hash Cond: (j2.id = j1.id)
525
+ -> Append
526
+ -> Index Scan using range_rel_2_dt_idx on range_rel_2 j2
527
+ -> Index Scan using range_rel_3_dt_idx on range_rel_3 j2_1
528
+ -> Index Scan using range_rel_4_dt_idx on range_rel_4 j2_2
529
+ -> Hash
530
+ -> Append
531
+ -> Index Scan using range_rel_1_pkey on range_rel_1 j1
532
+ -> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
533
+ (20 rows)
534
+
383
535
/*
384
536
* Test CTE query
385
537
*/
@@ -600,15 +752,26 @@ CREATE TABLE test.range_rel_test2 (
600
752
dt TIMESTAMP);
601
753
SELECT pathman.attach_range_partition('test.range_rel', 'test.range_rel_test2', '2013-01-01'::DATE, '2014-01-01'::DATE);
602
754
ERROR: Partition must have the exact same structure as parent P0001
755
+ /*
756
+ * Check that altering table columns doesn't break trigger
757
+ */
758
+ ALTER TABLE test.hash_rel ADD COLUMN abc int;
759
+ INSERT INTO test.hash_rel (id, value, abc) VALUES (123, 456, 789);
760
+ SELECT * FROM test.hash_rel WHERE id = 123;
761
+ id | value | abc
762
+ -----+-------+-----
763
+ 123 | 456 | 789
764
+ (1 row)
765
+
603
766
/*
604
767
* Clean up
605
768
*/
606
769
SELECT pathman.drop_hash_partitions('test.hash_rel');
607
770
NOTICE: drop cascades to trigger test_hash_rel_insert_trigger on table test.hash_rel
608
- NOTICE:function test.hash_rel_hash_update_trigger_func() does not exist, skipping
771
+ NOTICE:drop cascades to 3 other objects
609
772
NOTICE: 2 rows copied from test.hash_rel_2
610
773
NOTICE: 3 rows copied from test.hash_rel_1
611
- NOTICE:1 rows copied from test.hash_rel_0
774
+ NOTICE:2 rows copied from test.hash_rel_0
612
775
drop_hash_partitions
613
776
----------------------
614
777
3
@@ -617,12 +780,12 @@ NOTICE: 1 rows copied from test.hash_rel_0
617
780
SELECT COUNT(*) FROM ONLY test.hash_rel;
618
781
count
619
782
-------
620
- 6
783
+ 7
621
784
(1 row)
622
785
623
786
SELECT pathman.create_hash_partitions('test.hash_rel', 'value', 3);
624
- NOTICE: function test.hash_rel_hash_insert_trigger_func () does not exist, skipping
625
- NOTICE: function test.hash_rel_hash_update_trigger_func () does not exist, skipping
787
+ NOTICE: function test.hash_rel_insert_trigger_func () does not exist, skipping
788
+ NOTICE: function test.hash_rel_update_trigger_func () does not exist, skipping
626
789
NOTICE: Copying data to partitions...
627
790
create_hash_partitions
628
791
------------------------
@@ -631,7 +794,7 @@ NOTICE: Copying data to partitions...
631
794
632
795
SELECT pathman.drop_hash_partitions('test.hash_rel', TRUE);
633
796
NOTICE: drop cascades to trigger test_hash_rel_insert_trigger on table test.hash_rel
634
- NOTICE: function test.hash_rel_hash_update_trigger_func () does not exist, skipping
797
+ NOTICE: function test.hash_rel_update_trigger_func () does not exist, skipping
635
798
drop_hash_partitions
636
799
----------------------
637
800
3
@@ -770,8 +933,8 @@ CREATE TABLE hash_rel (
770
933
valueINTEGER NOT NULL);
771
934
INSERT INTO hash_rel (value) SELECT g FROM generate_series(1, 10000) as g;
772
935
SELECT create_hash_partitions('hash_rel', 'value', 3);
773
- NOTICE: functionhash_rel_hash_insert_trigger_func () does not exist, skipping
774
- NOTICE: functionhash_rel_hash_update_trigger_func () does not exist, skipping
936
+ NOTICE: functionhash_rel_insert_trigger_func () does not exist, skipping
937
+ NOTICE: functionhash_rel_update_trigger_func () does not exist, skipping
775
938
NOTICE: Copying data to partitions...
776
939
create_hash_partitions
777
940
------------------------