Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit526f237

Browse files
committed
Merge branch 'master_improved_planning' of github.com:postgrespro/pg_pathman into master_improved_planning
2 parents4795845 +5b0c96d commit526f237

File tree

2 files changed

+200
-124
lines changed

2 files changed

+200
-124
lines changed

‎expected/pathman_basic.out

Lines changed: 136 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,17 +1210,17 @@ DROP EXTENSION pg_pathman;
12101210
/* Test that everything works fine without schemas */
12111211
CREATE EXTENSION pg_pathman;
12121212
/* Hash */
1213-
CREATE TABLE hash_rel (
1213+
CREATE TABLEtest.hash_rel (
12141214
idSERIAL PRIMARY KEY,
12151215
valueINTEGER NOT NULL);
1216-
INSERT INTO hash_rel (value) SELECT g FROM generate_series(1, 10000) as g;
1217-
SELECT create_hash_partitions('hash_rel', 'value', 3);
1216+
INSERT INTOtest.hash_rel (value) SELECT g FROM generate_series(1, 10000) as g;
1217+
SELECT create_hash_partitions('test.hash_rel', 'value', 3);
12181218
create_hash_partitions
12191219
------------------------
12201220
3
12211221
(1 row)
12221222

1223-
EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
1223+
EXPLAIN (COSTS OFF) SELECT * FROMtest.hash_rel WHERE id = 1234;
12241224
QUERY PLAN
12251225
------------------------------------------------------
12261226
Append
@@ -1233,43 +1233,42 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
12331233
(7 rows)
12341234

12351235
/* Range */
1236-
CREATE TABLE range_rel (
1236+
CREATE TABLEtest.range_rel (
12371237
idSERIAL PRIMARY KEY,
12381238
dtTIMESTAMP NOT NULL,
12391239
valueINTEGER);
1240-
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;
1241-
SELECT create_range_partitions('range_rel', 'dt', '2010-01-01'::date, '1 month'::interval, 12);
1242-
NOTICE: sequence "range_rel_seq" does not exist, skipping
1240+
INSERT INTO test.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;
1241+
SELECT create_range_partitions('test.range_rel', 'dt', '2010-01-01'::date, '1 month'::interval, 12);
12431242
create_range_partitions
12441243
-------------------------
12451244
12
12461245
(1 row)
12471246

1248-
SELECT merge_range_partitions('range_rel_1', 'range_rel_2');
1247+
SELECT merge_range_partitions('test.range_rel_1', 'test.range_rel_2');
12491248
merge_range_partitions
12501249
------------------------
12511250

12521251
(1 row)
12531252

1254-
SELECT split_range_partition('range_rel_1', '2010-02-15'::date);
1253+
SELECT split_range_partition('test.range_rel_1', '2010-02-15'::date);
12551254
split_range_partition
12561255
-------------------------
12571256
{01-01-2010,03-01-2010}
12581257
(1 row)
12591258

1260-
SELECT append_range_partition('range_rel');
1259+
SELECT append_range_partition('test.range_rel');
12611260
append_range_partition
12621261
------------------------
1263-
public.range_rel_14
1262+
test.range_rel_14
12641263
(1 row)
12651264

1266-
SELECT prepend_range_partition('range_rel');
1265+
SELECT prepend_range_partition('test.range_rel');
12671266
prepend_range_partition
12681267
-------------------------
1269-
public.range_rel_15
1268+
test.range_rel_15
12701269
(1 row)
12711270

1272-
EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt < '2010-03-01';
1271+
EXPLAIN (COSTS OFF) SELECT * FROMtest.range_rel WHERE dt < '2010-03-01';
12731272
QUERY PLAN
12741273
--------------------------------
12751274
Append
@@ -1278,7 +1277,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt < '2010-03-01';
12781277
-> Seq Scan on range_rel_13
12791278
(4 rows)
12801279

1281-
EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt > '2010-12-15';
1280+
EXPLAIN (COSTS OFF) SELECT * FROMtest.range_rel WHERE dt > '2010-12-15';
12821281
QUERY PLAN
12831282
--------------------------------------------------------------------------------
12841283
Append
@@ -1288,39 +1287,39 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt > '2010-12-15';
12881287
(4 rows)
12891288

12901289
/* Temporary table for JOINs */
1291-
CREATE TABLE tmp (id INTEGER NOT NULL, value INTEGER NOT NULL);
1292-
INSERT INTO tmp VALUES (1, 1), (2, 2);
1290+
CREATE TABLEtest.tmp (id INTEGER NOT NULL, value INTEGER NOT NULL);
1291+
INSERT INTOtest.tmp VALUES (1, 1), (2, 2);
12931292
/* Test UPDATE and DELETE */
1294-
EXPLAIN (COSTS OFF) UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
1293+
EXPLAIN (COSTS OFF) UPDATEtest.range_rel SET value = 111 WHERE dt = '2010-06-15';
12951294
QUERY PLAN
12961295
--------------------------------------------------------------------------------
12971296
Update on range_rel_6
12981297
-> Seq Scan on range_rel_6
12991298
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
13001299
(3 rows)
13011300

1302-
UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
1303-
SELECT * FROM range_rel WHERE dt = '2010-06-15';
1301+
UPDATEtest.range_rel SET value = 111 WHERE dt = '2010-06-15';
1302+
SELECT * FROMtest.range_rel WHERE dt = '2010-06-15';
13041303
id | dt | value
13051304
-----+--------------------------+-------
13061305
166 | Tue Jun 15 00:00:00 2010 | 111
13071306
(1 row)
13081307

1309-
EXPLAIN (COSTS OFF) DELETE FROM range_rel WHERE dt = '2010-06-15';
1308+
EXPLAIN (COSTS OFF) DELETE FROMtest.range_rel WHERE dt = '2010-06-15';
13101309
QUERY PLAN
13111310
--------------------------------------------------------------------------------
13121311
Delete on range_rel_6
13131312
-> Seq Scan on range_rel_6
13141313
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
13151314
(3 rows)
13161315

1317-
DELETE FROM range_rel WHERE dt = '2010-06-15';
1318-
SELECT * FROM range_rel WHERE dt = '2010-06-15';
1316+
DELETE FROMtest.range_rel WHERE dt = '2010-06-15';
1317+
SELECT * FROMtest.range_rel WHERE dt = '2010-06-15';
13191318
id | dt | value
13201319
----+----+-------
13211320
(0 rows)
13221321

1323-
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;
1322+
EXPLAIN (COSTS OFF) UPDATEtest.range_rel r SET value = t.value FROMtest.tmp t WHERE r.dt = '2010-01-01' AND r.id = t.id;
13241323
QUERY PLAN
13251324
--------------------------------------------------------------------------------------------
13261325
Update on range_rel_1 r
@@ -1332,8 +1331,8 @@ EXPLAIN (COSTS OFF) UPDATE range_rel r SET value = t.value FROM tmp t WHERE r.dt
13321331
Filter: (dt = 'Fri Jan 01 00:00:00 2010'::timestamp without time zone)
13331332
(7 rows)
13341333

1335-
UPDATE range_rel r SET value = t.value FROM tmp t WHERE r.dt = '2010-01-01' AND r.id = t.id;
1336-
EXPLAIN (COSTS OFF) DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
1334+
UPDATEtest.range_rel r SET value = t.value FROMtest.tmp t WHERE r.dt = '2010-01-01' AND r.id = t.id;
1335+
EXPLAIN (COSTS OFF) DELETE FROMtest.range_rel r USINGtest.tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
13371336
QUERY PLAN
13381337
--------------------------------------------------------------------------------------------
13391338
Delete on range_rel_1 r
@@ -1345,49 +1344,49 @@ EXPLAIN (COSTS OFF) DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02
13451344
Filter: (dt = 'Sat Jan 02 00:00:00 2010'::timestamp without time zone)
13461345
(7 rows)
13471346

1348-
DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
1347+
DELETE FROMtest.range_rel r USINGtest.tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
13491348
/* Create range partitions from whole range */
1350-
SELECT drop_partitions('range_rel');
1351-
NOTICE: functionpublic.range_rel_upd_trig_func() does not exist, skipping
1352-
NOTICE: 44 rows copied from range_rel_1
1353-
NOTICE: 31 rows copied from range_rel_3
1354-
NOTICE: 30 rows copied from range_rel_4
1355-
NOTICE: 31 rows copied from range_rel_5
1356-
NOTICE: 29 rows copied from range_rel_6
1357-
NOTICE: 31 rows copied from range_rel_7
1358-
NOTICE: 31 rows copied from range_rel_8
1359-
NOTICE: 30 rows copied from range_rel_9
1360-
NOTICE: 31 rows copied from range_rel_10
1361-
NOTICE: 30 rows copied from range_rel_11
1362-
NOTICE: 31 rows copied from range_rel_12
1363-
NOTICE: 14 rows copied from range_rel_13
1364-
NOTICE: 0 rows copied from range_rel_14
1365-
NOTICE: 0 rows copied from range_rel_15
1349+
SELECT drop_partitions('test.range_rel');
1350+
NOTICE: functiontest.range_rel_upd_trig_func() does not exist, skipping
1351+
NOTICE: 44 rows copied fromtest.range_rel_1
1352+
NOTICE: 31 rows copied fromtest.range_rel_3
1353+
NOTICE: 30 rows copied fromtest.range_rel_4
1354+
NOTICE: 31 rows copied fromtest.range_rel_5
1355+
NOTICE: 29 rows copied fromtest.range_rel_6
1356+
NOTICE: 31 rows copied fromtest.range_rel_7
1357+
NOTICE: 31 rows copied fromtest.range_rel_8
1358+
NOTICE: 30 rows copied fromtest.range_rel_9
1359+
NOTICE: 31 rows copied fromtest.range_rel_10
1360+
NOTICE: 30 rows copied fromtest.range_rel_11
1361+
NOTICE: 31 rows copied fromtest.range_rel_12
1362+
NOTICE: 14 rows copied fromtest.range_rel_13
1363+
NOTICE: 0 rows copied fromtest.range_rel_14
1364+
NOTICE: 0 rows copied fromtest.range_rel_15
13661365
drop_partitions
13671366
-----------------
13681367
14
13691368
(1 row)
13701369

1371-
SELECT create_partitions_from_range('range_rel', 'id', 1, 1000, 100);
1370+
SELECT create_partitions_from_range('test.range_rel', 'id', 1, 1000, 100);
13721371
create_partitions_from_range
13731372
------------------------------
13741373
10
13751374
(1 row)
13761375

1377-
SELECT drop_partitions('range_rel', TRUE);
1378-
NOTICE: functionpublic.range_rel_upd_trig_func() does not exist, skipping
1376+
SELECT drop_partitions('test.range_rel', TRUE);
1377+
NOTICE: functiontest.range_rel_upd_trig_func() does not exist, skipping
13791378
drop_partitions
13801379
-----------------
13811380
10
13821381
(1 row)
13831382

1384-
SELECT create_partitions_from_range('range_rel', 'dt', '2015-01-01'::date, '2015-12-01'::date, '1 month'::interval);
1383+
SELECT create_partitions_from_range('test.range_rel', 'dt', '2015-01-01'::date, '2015-12-01'::date, '1 month'::interval);
13851384
create_partitions_from_range
13861385
------------------------------
13871386
12
13881387
(1 row)
13891388

1390-
EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt = '2015-12-15';
1389+
EXPLAIN (COSTS OFF) SELECT * FROMtest.range_rel WHERE dt = '2015-12-15';
13911390
QUERY PLAN
13921391
--------------------------------------------------------------------------------
13931392
Append
@@ -1396,45 +1395,45 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt = '2015-12-15';
13961395
(3 rows)
13971396

13981397
/* Test foreign keys */
1399-
CREATE TABLE messages(id SERIAL PRIMARY KEY, msg TEXT);
1400-
CREATE TABLE replies(id SERIAL PRIMARY KEY, message_id INTEGER REFERENCES messages(id), msg TEXT);
1401-
INSERT INTO messages SELECT g, md5(g::text) FROM generate_series(1, 10) as g;
1402-
INSERT INTO replies SELECT g, g, md5(g::text) FROM generate_series(1, 10) as g;
1403-
SELECT create_range_partitions('messages', 'id', 1, 100, 2);
1404-
WARNING: foreign key "replies_message_id_fkey" references relation "messages"
1405-
ERROR: relation "messages" is referenced from other relations
1406-
ALTER TABLE replies DROP CONSTRAINT replies_message_id_fkey;
1407-
SELECT create_range_partitions('messages', 'id', 1, 100, 2);
1398+
CREATE TABLEtest.messages(id SERIAL PRIMARY KEY, msg TEXT);
1399+
CREATE TABLEtest.replies(id SERIAL PRIMARY KEY, message_id INTEGER REFERENCEStest.messages(id), msg TEXT);
1400+
INSERT INTOtest.messages SELECT g, md5(g::text) FROM generate_series(1, 10) as g;
1401+
INSERT INTOtest.replies SELECT g, g, md5(g::text) FROM generate_series(1, 10) as g;
1402+
SELECT create_range_partitions('test.messages', 'id', 1, 100, 2);
1403+
WARNING: foreign key "replies_message_id_fkey" references relation "test.messages"
1404+
ERROR: relation "test.messages" is referenced from other relations
1405+
ALTER TABLEtest.replies DROP CONSTRAINT replies_message_id_fkey;
1406+
SELECT create_range_partitions('test.messages', 'id', 1, 100, 2);
14081407
NOTICE: sequence "messages_seq" does not exist, skipping
14091408
create_range_partitions
14101409
-------------------------
14111410
2
14121411
(1 row)
14131412

1414-
EXPLAIN (COSTS OFF) SELECT * FROM messages;
1413+
EXPLAIN (COSTS OFF) SELECT * FROMtest.messages;
14151414
QUERY PLAN
14161415
------------------------------
14171416
Append
14181417
-> Seq Scan on messages_1
14191418
-> Seq Scan on messages_2
14201419
(3 rows)
14211420

1422-
DROP TABLE messages, replies CASCADE;
1421+
DROP TABLEtest.messages,test.replies CASCADE;
14231422
NOTICE: drop cascades to 2 other objects
14241423
/* Special test case (quals generation) -- fixing commit f603e6c5 */
1425-
CREATE TABLE special_case_1_ind_o_s(val serial, comment text);
1426-
INSERT INTO special_case_1_ind_o_s SELECT generate_series(1, 200), NULL;
1427-
SELECT create_range_partitions('special_case_1_ind_o_s', 'val', 1, 50);
1424+
CREATE TABLEtest.special_case_1_ind_o_s(val serial, comment text);
1425+
INSERT INTOtest.special_case_1_ind_o_s SELECT generate_series(1, 200), NULL;
1426+
SELECT create_range_partitions('test.special_case_1_ind_o_s', 'val', 1, 50);
14281427
NOTICE: sequence "special_case_1_ind_o_s_seq" does not exist, skipping
14291428
create_range_partitions
14301429
-------------------------
14311430
4
14321431
(1 row)
14331432

1434-
INSERT INTO special_case_1_ind_o_s_2 SELECT 75 FROM generate_series(1, 6000);
1435-
CREATE INDEX ON special_case_1_ind_o_s_2 (val, comment);
1436-
VACUUM ANALYZE special_case_1_ind_o_s_2;
1437-
EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
1433+
INSERT INTOtest.special_case_1_ind_o_s_2 SELECT 75 FROM generate_series(1, 6000);
1434+
CREATE INDEX ONtest.special_case_1_ind_o_s_2 (val, comment);
1435+
VACUUM ANALYZEtest.special_case_1_ind_o_s_2;
1436+
EXPLAIN (COSTS OFF) SELECT * FROMtest.special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
14381437
QUERY PLAN
14391438
--------------------------------------------------------------------------------------------------
14401439
Append
@@ -1444,13 +1443,13 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
14441443
Index Cond: ((val < 75) AND (comment = 'a'::text))
14451444
(5 rows)
14461445

1447-
SELECT set_enable_parent('special_case_1_ind_o_s', true);
1446+
SELECT set_enable_parent('test.special_case_1_ind_o_s', true);
14481447
set_enable_parent
14491448
-------------------
14501449

14511450
(1 row)
14521451

1453-
EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
1452+
EXPLAIN (COSTS OFF) SELECT * FROMtest.special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
14541453
QUERY PLAN
14551454
--------------------------------------------------------------------------------------------------
14561455
Append
@@ -1462,13 +1461,13 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
14621461
Index Cond: ((val < 75) AND (comment = 'a'::text))
14631462
(7 rows)
14641463

1465-
SELECT set_enable_parent('special_case_1_ind_o_s', false);
1464+
SELECT set_enable_parent('test.special_case_1_ind_o_s', false);
14661465
set_enable_parent
14671466
-------------------
14681467

14691468
(1 row)
14701469

1471-
EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
1470+
EXPLAIN (COSTS OFF) SELECT * FROMtest.special_case_1_ind_o_s WHERE val < 75 AND comment = 'a';
14721471
QUERY PLAN
14731472
--------------------------------------------------------------------------------------------------
14741473
Append
@@ -1478,8 +1477,72 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
14781477
Index Cond: ((val < 75) AND (comment = 'a'::text))
14791478
(5 rows)
14801479

1480+
/* Test index scans on child relation under enable_parent is set */
1481+
CREATE TABLE test.index_on_childs(c1 integer not null, c2 integer);
1482+
CREATE INDEX ON test.index_on_childs(c2);
1483+
INSERT INTO test.index_on_childs SELECT i, (random()*10000)::integer FROM generate_series(1, 10000) i;
1484+
SELECT create_range_partitions('test.index_on_childs', 'c1', 1, 1000, 0, false);
1485+
NOTICE: sequence "index_on_childs_seq" does not exist, skipping
1486+
create_range_partitions
1487+
-------------------------
1488+
0
1489+
(1 row)
1490+
1491+
SELECT add_range_partition('test.index_on_childs', 1, 1000, 'test.index_on_childs_1_1K');
1492+
add_range_partition
1493+
---------------------------
1494+
test.index_on_childs_1_1K
1495+
(1 row)
1496+
1497+
SELECT append_range_partition('test.index_on_childs', 'test.index_on_childs_1K_2K');
1498+
append_range_partition
1499+
----------------------------
1500+
test.index_on_childs_1K_2K
1501+
(1 row)
1502+
1503+
SELECT append_range_partition('test.index_on_childs', 'test.index_on_childs_2K_3K');
1504+
append_range_partition
1505+
----------------------------
1506+
test.index_on_childs_2K_3K
1507+
(1 row)
1508+
1509+
SELECT append_range_partition('test.index_on_childs', 'test.index_on_childs_3K_4K');
1510+
append_range_partition
1511+
----------------------------
1512+
test.index_on_childs_3K_4K
1513+
(1 row)
1514+
1515+
SELECT append_range_partition('test.index_on_childs', 'test.index_on_childs_4K_5K');
1516+
append_range_partition
1517+
----------------------------
1518+
test.index_on_childs_4K_5K
1519+
(1 row)
1520+
1521+
SELECT set_enable_parent('test.index_on_childs', true);
1522+
set_enable_parent
1523+
-------------------
1524+
1525+
(1 row)
1526+
1527+
VACUUM ANALYZE test.index_on_childs;
1528+
EXPLAIN (COSTS OFF) SELECT * FROM test.index_on_childs WHERE c1 > 100 AND c1 < 2500 AND c2 = 500;
1529+
QUERY PLAN
1530+
------------------------------------------------------------------------------
1531+
Append
1532+
-> Index Scan using index_on_childs_c2_idx on index_on_childs
1533+
Index Cond: (c2 = 500)
1534+
Filter: ((c1 > 100) AND (c1 < 2500))
1535+
-> Index Scan using index_on_childs_1_1k_c2_idx on index_on_childs_1_1k
1536+
Index Cond: (c2 = 500)
1537+
Filter: (c1 > 100)
1538+
-> Index Scan using index_on_childs_1k_2k_c2_idx on index_on_childs_1k_2k
1539+
Index Cond: (c2 = 500)
1540+
-> Index Scan using index_on_childs_2k_3k_c2_idx on index_on_childs_2k_3k
1541+
Index Cond: (c2 = 500)
1542+
Filter: (c1 < 2500)
1543+
(12 rows)
1544+
14811545
DROP SCHEMA test CASCADE;
1482-
NOTICE: drop cascades to13 other objects
1546+
NOTICE: drop cascades to45 other objects
14831547
DROP EXTENSION pg_pathman CASCADE;
1484-
NOTICE: drop cascades to 3 other objects
14851548
DROP SCHEMA pathman CASCADE;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp