1
1
CREATE EXTENSION pathman;
2
- SET enable_indexscan = OFF;
3
- SET enable_bitmapscan = OFF;
4
2
CREATE TABLE hash_rel (
5
3
id SERIAL PRIMARY KEY,
6
4
value INTEGER);
@@ -14,12 +12,26 @@ NOTICE: function hash_rel_hash_update_trigger_func() does not exist, skipping
14
12
15
13
(1 row)
16
14
15
+ CREATE TABLE num_range_rel (
16
+ id SERIAL PRIMARY KEY,
17
+ txt TEXT);
18
+ SELECT create_range_partitions('num_range_rel', 'id', 'num', 0, 1000, 3);
19
+ create_range_partitions
20
+ -------------------------
21
+
22
+ (1 row)
23
+
17
24
INSERT INTO hash_rel VALUES (1, 1);
18
25
INSERT INTO hash_rel VALUES (2, 2);
19
26
INSERT INTO hash_rel VALUES (3, 3);
20
27
INSERT INTO hash_rel VALUES (4, 4);
21
28
INSERT INTO hash_rel VALUES (5, 5);
22
29
INSERT INTO hash_rel VALUES (6, 6);
30
+ INSERT INTO num_range_rel SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
31
+ VACUUM;
32
+ SET enable_indexscan = OFF;
33
+ SET enable_bitmapscan = OFF;
34
+ SET enable_seqscan = ON;
23
35
EXPLAIN (COSTS OFF) SELECT * FROM hash_rel;
24
36
QUERY PLAN
25
37
------------------------------
@@ -47,30 +59,6 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE value = 2 OR value = 1;
47
59
Filter: (value = 2)
48
60
(5 rows)
49
61
50
- SELECT drop_hash_partitions('hash_rel');
51
- NOTICE: trigger "hash_rel_update_trigger" for relation "hash_rel" does not exist, skipping
52
- NOTICE: function hash_rel_hash_update_trigger_func() does not exist, skipping
53
- drop_hash_partitions
54
- ----------------------
55
-
56
- (1 row)
57
-
58
- DROP TABLE hash_rel CASCADE;
59
- NOTICE: drop cascades to 3 other objects
60
- DETAIL: drop cascades to table hash_rel_0
61
- drop cascades to table hash_rel_1
62
- drop cascades to table hash_rel_2
63
- CREATE TABLE num_range_rel (
64
- id SERIAL PRIMARY KEY,
65
- txt TEXT);
66
- SELECT create_range_partitions('num_range_rel', 'id', 'num', '0', '1000', 3);
67
- create_range_partitions
68
- -------------------------
69
-
70
- (1 row)
71
-
72
- INSERT INTO num_range_rel SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
73
- VACUUM;
74
62
EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE id > 2500;
75
63
QUERY PLAN
76
64
--------------------------------------
@@ -111,6 +99,89 @@ EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE (id >= 500 AND id < 1500)
111
99
-> Seq Scan on num_range_rel_3000
112
100
(8 rows)
113
101
102
+ SET enable_indexscan = ON;
103
+ SET enable_bitmapscan = OFF;
104
+ SET enable_seqscan = OFF;
105
+ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel;
106
+ QUERY PLAN
107
+ ------------------------------
108
+ Append
109
+ -> Seq Scan on hash_rel_0
110
+ -> Seq Scan on hash_rel_1
111
+ -> Seq Scan on hash_rel_2
112
+ (4 rows)
113
+
114
+ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE value = 2;
115
+ QUERY PLAN
116
+ ------------------------------
117
+ Append
118
+ -> Seq Scan on hash_rel_2
119
+ Filter: (value = 2)
120
+ (3 rows)
121
+
122
+ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE value = 2 OR value = 1;
123
+ QUERY PLAN
124
+ ------------------------------
125
+ Append
126
+ -> Seq Scan on hash_rel_1
127
+ Filter: (value = 1)
128
+ -> Seq Scan on hash_rel_2
129
+ Filter: (value = 2)
130
+ (5 rows)
131
+
132
+ EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE id > 2500;
133
+ QUERY PLAN
134
+ ----------------------------------------------------------------------
135
+ Append
136
+ -> Index Scan using num_range_rel_2000_pkey on num_range_rel_2000
137
+ Index Cond: (id > 2500)
138
+ -> Seq Scan on num_range_rel_3000
139
+ (4 rows)
140
+
141
+ EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE id >= 1000 AND id < 3000;
142
+ QUERY PLAN
143
+ --------------------------------------
144
+ Append
145
+ -> Seq Scan on num_range_rel_1000
146
+ -> Seq Scan on num_range_rel_2000
147
+ (3 rows)
148
+
149
+ EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE id >= 1500 AND id < 2500;
150
+ QUERY PLAN
151
+ ----------------------------------------------------------------------
152
+ Append
153
+ -> Index Scan using num_range_rel_1000_pkey on num_range_rel_1000
154
+ Index Cond: (id >= 1500)
155
+ -> Index Scan using num_range_rel_2000_pkey on num_range_rel_2000
156
+ Index Cond: (id < 2500)
157
+ (5 rows)
158
+
159
+ EXPLAIN (COSTS OFF) SELECT * FROM num_range_rel WHERE (id >= 500 AND id < 1500) OR (id > 2500);
160
+ QUERY PLAN
161
+ ----------------------------------------------------------------------
162
+ Append
163
+ -> Index Scan using num_range_rel_0_pkey on num_range_rel_0
164
+ Index Cond: (id >= 500)
165
+ -> Index Scan using num_range_rel_1000_pkey on num_range_rel_1000
166
+ Index Cond: (id < 1500)
167
+ -> Index Scan using num_range_rel_2000_pkey on num_range_rel_2000
168
+ Index Cond: (id > 2500)
169
+ -> Seq Scan on num_range_rel_3000
170
+ (8 rows)
171
+
172
+ SELECT drop_hash_partitions('hash_rel');
173
+ NOTICE: trigger "hash_rel_update_trigger" for relation "hash_rel" does not exist, skipping
174
+ NOTICE: function hash_rel_hash_update_trigger_func() does not exist, skipping
175
+ drop_hash_partitions
176
+ ----------------------
177
+
178
+ (1 row)
179
+
180
+ DROP TABLE hash_rel CASCADE;
181
+ NOTICE: drop cascades to 3 other objects
182
+ DETAIL: drop cascades to table hash_rel_0
183
+ drop cascades to table hash_rel_1
184
+ drop cascades to table hash_rel_2
114
185
SELECT drop_range_partitions('num_range_rel');
115
186
drop_range_partitions
116
187
-----------------------