@@ -3,8 +3,8 @@ CREATE SCHEMA pathman;
3
3
CREATE EXTENSION pg_pathman SCHEMA pathman;
4
4
CREATE SCHEMA test;
5
5
CREATE TABLE test.hash_rel (
6
- id SERIAL PRIMARY KEY,
7
- value INTEGER);
6
+ id SERIAL PRIMARY KEY,
7
+ value INTEGER);
8
8
INSERT INTO test.hash_rel VALUES (1, 1);
9
9
INSERT INTO test.hash_rel VALUES (2, 2);
10
10
INSERT INTO test.hash_rel VALUES (3, 3);
@@ -48,9 +48,9 @@ SELECT COUNT(*) FROM ONLY test.hash_rel;
48
48
(1 row)
49
49
50
50
CREATE TABLE test.range_rel (
51
- id SERIAL PRIMARY KEY,
52
- dt TIMESTAMP,
53
- txt TEXT);
51
+ id SERIAL PRIMARY KEY,
52
+ dt TIMESTAMP,
53
+ txt TEXT);
54
54
CREATE INDEX ON test.range_rel (dt);
55
55
INSERT INTO test.range_rel (dt, txt)
56
56
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
@@ -80,8 +80,8 @@ SELECT COUNT(*) FROM ONLY test.range_rel;
80
80
(1 row)
81
81
82
82
CREATE TABLE test.num_range_rel (
83
- id SERIAL PRIMARY KEY,
84
- txt TEXT);
83
+ id SERIAL PRIMARY KEY,
84
+ txt TEXT);
85
85
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
86
86
NOTICE: sequence "num_range_rel_seq" does not exist, skipping
87
87
NOTICE: Copying data to partitions...
@@ -103,7 +103,7 @@ SELECT COUNT(*) FROM ONLY test.num_range_rel;
103
103
(1 row)
104
104
105
105
INSERT INTO test.num_range_rel
106
- SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
106
+ SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
107
107
SELECT COUNT(*) FROM test.num_range_rel;
108
108
count
109
109
-------
@@ -648,8 +648,8 @@ DROP TABLE test.range_rel CASCADE;
648
648
NOTICE: drop cascades to 7 other objects
649
649
/* Test automatic partition creation */
650
650
CREATE TABLE test.range_rel (
651
- id SERIAL PRIMARY KEY,
652
- dt TIMESTAMP NOT NULL);
651
+ id SERIAL PRIMARY KEY,
652
+ dt TIMESTAMP NOT NULL);
653
653
SELECT pathman.create_range_partitions('test.range_rel', 'dt', '2015-01-01'::DATE, '10 days'::INTERVAL, 1);
654
654
NOTICE: Copying data to partitions...
655
655
create_range_partitions
@@ -698,8 +698,8 @@ SELECT * FROM pathman.pathman_config;
698
698
699
699
/* Check overlaps */
700
700
CREATE TABLE test.num_range_rel (
701
- id SERIAL PRIMARY KEY,
702
- txt TEXT);
701
+ id SERIAL PRIMARY KEY,
702
+ txt TEXT);
703
703
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 1000, 1000, 4);
704
704
NOTICE: Copying data to partitions...
705
705
create_range_partitions
@@ -754,8 +754,8 @@ DROP EXTENSION pg_pathman;
754
754
CREATE EXTENSION pg_pathman;
755
755
/* Hash */
756
756
CREATE TABLE hash_rel (
757
- id SERIAL PRIMARY KEY,
758
- value INTEGER NOT NULL);
757
+ id SERIAL PRIMARY KEY,
758
+ value INTEGER NOT NULL);
759
759
INSERT INTO hash_rel (value) SELECT g FROM generate_series(1, 10000) as g;
760
760
SELECT create_hash_partitions('hash_rel', 'value', 3);
761
761
NOTICE: function hash_rel_hash_insert_trigger_func() does not exist, skipping
@@ -780,9 +780,10 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
780
780
781
781
/* Range */
782
782
CREATE TABLE range_rel (
783
- id SERIAL PRIMARY KEY,
784
- dt TIMESTAMP NOT NULL);
785
- INSERT INTO range_rel (dt) SELECT g FROM generate_series('2010-01-01'::date, '2010-12-31'::date, '1 day') as g;
783
+ idSERIAL PRIMARY KEY,
784
+ dtTIMESTAMP NOT NULL,
785
+ valueINTEGER);
786
+ INSERT INTO range_rel (dt, value) SELECT g, extract(day from g) FROM generate_series('2010-01-01'::date, '2010-12-31'::date, '1 day') as g;
786
787
SELECT create_range_partitions('range_rel', 'dt', '2010-01-01'::date, '1 month'::interval, 12);
787
788
NOTICE: sequence "range_rel_seq" does not exist, skipping
788
789
NOTICE: Copying data to partitions...
@@ -845,6 +846,65 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt > '2010-12-15';
845
846
-> Seq Scan on range_rel_14
846
847
(4 rows)
847
848
849
+ /* Temporary table for JOINs */
850
+ CREATE TABLE tmp (id INTEGER NOT NULL, value INTEGER NOT NULL);
851
+ INSERT INTO tmp VALUES (1, 1), (2, 2);
852
+ /* Test UPDATE and DELETE */
853
+ EXPLAIN (COSTS OFF) UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
854
+ QUERY PLAN
855
+ --------------------------------------------------------------------------------
856
+ Update on range_rel_6
857
+ -> Seq Scan on range_rel_6
858
+ Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
859
+ (3 rows)
860
+
861
+ UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
862
+ SELECT * FROM range_rel WHERE dt = '2010-06-15';
863
+ id | dt | value
864
+ -----+--------------------------+-------
865
+ 166 | Tue Jun 15 00:00:00 2010 | 111
866
+ (1 row)
867
+
868
+ EXPLAIN (COSTS OFF) DELETE FROM range_rel WHERE dt = '2010-06-15';
869
+ QUERY PLAN
870
+ --------------------------------------------------------------------------------
871
+ Delete on range_rel_6
872
+ -> Seq Scan on range_rel_6
873
+ Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
874
+ (3 rows)
875
+
876
+ DELETE FROM range_rel WHERE dt = '2010-06-15';
877
+ SELECT * FROM range_rel WHERE dt = '2010-06-15';
878
+ id | dt | value
879
+ ----+----+-------
880
+ (0 rows)
881
+
882
+ EXPLAIN (COSTS OFF) UPDATE range_rel r SET value = t.value FROM tmp t WHERE r.dt = '2010-01-01' AND r.id = t.id;
883
+ QUERY PLAN
884
+ --------------------------------------------------------------------------------------------
885
+ Update on range_rel_1 r
886
+ -> Hash Join
887
+ Hash Cond: (t.id = r.id)
888
+ -> Seq Scan on tmp t
889
+ -> Hash
890
+ -> Index Scan using range_rel_1_pkey on range_rel_1 r
891
+ Filter: (dt = 'Fri Jan 01 00:00:00 2010'::timestamp without time zone)
892
+ (7 rows)
893
+
894
+ UPDATE range_rel r SET value = t.value FROM tmp t WHERE r.dt = '2010-01-01' AND r.id = t.id;
895
+ EXPLAIN (COSTS OFF) DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
896
+ QUERY PLAN
897
+ --------------------------------------------------------------------------------------------
898
+ Delete on range_rel_1 r
899
+ -> Hash Join
900
+ Hash Cond: (t.id = r.id)
901
+ -> Seq Scan on tmp t
902
+ -> Hash
903
+ -> Index Scan using range_rel_1_pkey on range_rel_1 r
904
+ Filter: (dt = 'Sat Jan 02 00:00:00 2010'::timestamp without time zone)
905
+ (7 rows)
906
+
907
+ DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
848
908
/* Create range partitions from whole range */
849
909
SELECT drop_range_partitions('range_rel');
850
910
NOTICE: 0 rows copied from range_rel_15
@@ -856,11 +916,11 @@ NOTICE: 31 rows copied from range_rel_10
856
916
NOTICE: 30 rows copied from range_rel_9
857
917
NOTICE: 31 rows copied from range_rel_8
858
918
NOTICE: 31 rows copied from range_rel_7
859
- NOTICE:30 rows copied from range_rel_6
919
+ NOTICE:29 rows copied from range_rel_6
860
920
NOTICE: 31 rows copied from range_rel_5
861
921
NOTICE: 30 rows copied from range_rel_4
862
922
NOTICE: 31 rows copied from range_rel_3
863
- NOTICE:45 rows copied from range_rel_1
923
+ NOTICE:44 rows copied from range_rel_1
864
924
drop_range_partitions
865
925
-----------------------
866
926
14