@@ -1210,17 +1210,17 @@ DROP EXTENSION pg_pathman;
1210
1210
/* Test that everything works fine without schemas */
1211
1211
CREATE EXTENSION pg_pathman;
1212
1212
/* Hash */
1213
- CREATE TABLE hash_rel (
1213
+ CREATE TABLEtest. hash_rel (
1214
1214
idSERIAL PRIMARY KEY,
1215
1215
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);
1218
1218
create_hash_partitions
1219
1219
------------------------
1220
1220
3
1221
1221
(1 row)
1222
1222
1223
- EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
1223
+ EXPLAIN (COSTS OFF) SELECT * FROMtest. hash_rel WHERE id = 1234;
1224
1224
QUERY PLAN
1225
1225
------------------------------------------------------
1226
1226
Append
@@ -1233,43 +1233,42 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
1233
1233
(7 rows)
1234
1234
1235
1235
/* Range */
1236
- CREATE TABLE range_rel (
1236
+ CREATE TABLEtest. range_rel (
1237
1237
idSERIAL PRIMARY KEY,
1238
1238
dtTIMESTAMP NOT NULL,
1239
1239
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);
1243
1242
create_range_partitions
1244
1243
-------------------------
1245
1244
12
1246
1245
(1 row)
1247
1246
1248
- SELECT merge_range_partitions('range_rel_1', 'range_rel_2');
1247
+ SELECT merge_range_partitions('test. range_rel_1', 'test. range_rel_2');
1249
1248
merge_range_partitions
1250
1249
------------------------
1251
1250
1252
1251
(1 row)
1253
1252
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);
1255
1254
split_range_partition
1256
1255
-------------------------
1257
1256
{01-01-2010,03-01-2010}
1258
1257
(1 row)
1259
1258
1260
- SELECT append_range_partition('range_rel');
1259
+ SELECT append_range_partition('test. range_rel');
1261
1260
append_range_partition
1262
1261
------------------------
1263
- public .range_rel_14
1262
+ test .range_rel_14
1264
1263
(1 row)
1265
1264
1266
- SELECT prepend_range_partition('range_rel');
1265
+ SELECT prepend_range_partition('test. range_rel');
1267
1266
prepend_range_partition
1268
1267
-------------------------
1269
- public .range_rel_15
1268
+ test .range_rel_15
1270
1269
(1 row)
1271
1270
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';
1273
1272
QUERY PLAN
1274
1273
--------------------------------
1275
1274
Append
@@ -1278,7 +1277,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt < '2010-03-01';
1278
1277
-> Seq Scan on range_rel_13
1279
1278
(4 rows)
1280
1279
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';
1282
1281
QUERY PLAN
1283
1282
--------------------------------------------------------------------------------
1284
1283
Append
@@ -1288,39 +1287,39 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt > '2010-12-15';
1288
1287
(4 rows)
1289
1288
1290
1289
/* 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);
1293
1292
/* 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';
1295
1294
QUERY PLAN
1296
1295
--------------------------------------------------------------------------------
1297
1296
Update on range_rel_6
1298
1297
-> Seq Scan on range_rel_6
1299
1298
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
1300
1299
(3 rows)
1301
1300
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';
1304
1303
id | dt | value
1305
1304
-----+--------------------------+-------
1306
1305
166 | Tue Jun 15 00:00:00 2010 | 111
1307
1306
(1 row)
1308
1307
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';
1310
1309
QUERY PLAN
1311
1310
--------------------------------------------------------------------------------
1312
1311
Delete on range_rel_6
1313
1312
-> Seq Scan on range_rel_6
1314
1313
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
1315
1314
(3 rows)
1316
1315
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';
1319
1318
id | dt | value
1320
1319
----+----+-------
1321
1320
(0 rows)
1322
1321
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;
1324
1323
QUERY PLAN
1325
1324
--------------------------------------------------------------------------------------------
1326
1325
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
1332
1331
Filter: (dt = 'Fri Jan 01 00:00:00 2010'::timestamp without time zone)
1333
1332
(7 rows)
1334
1333
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;
1337
1336
QUERY PLAN
1338
1337
--------------------------------------------------------------------------------------------
1339
1338
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
1345
1344
Filter: (dt = 'Sat Jan 02 00:00:00 2010'::timestamp without time zone)
1346
1345
(7 rows)
1347
1346
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;
1349
1348
/* 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
1366
1365
drop_partitions
1367
1366
-----------------
1368
1367
14
1369
1368
(1 row)
1370
1369
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);
1372
1371
create_partitions_from_range
1373
1372
------------------------------
1374
1373
10
1375
1374
(1 row)
1376
1375
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
1379
1378
drop_partitions
1380
1379
-----------------
1381
1380
10
1382
1381
(1 row)
1383
1382
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);
1385
1384
create_partitions_from_range
1386
1385
------------------------------
1387
1386
12
1388
1387
(1 row)
1389
1388
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';
1391
1390
QUERY PLAN
1392
1391
--------------------------------------------------------------------------------
1393
1392
Append
@@ -1396,45 +1395,45 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt = '2015-12-15';
1396
1395
(3 rows)
1397
1396
1398
1397
/* 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);
1408
1407
NOTICE: sequence "messages_seq" does not exist, skipping
1409
1408
create_range_partitions
1410
1409
-------------------------
1411
1410
2
1412
1411
(1 row)
1413
1412
1414
- EXPLAIN (COSTS OFF) SELECT * FROM messages;
1413
+ EXPLAIN (COSTS OFF) SELECT * FROMtest. messages;
1415
1414
QUERY PLAN
1416
1415
------------------------------
1417
1416
Append
1418
1417
-> Seq Scan on messages_1
1419
1418
-> Seq Scan on messages_2
1420
1419
(3 rows)
1421
1420
1422
- DROP TABLE messages, replies CASCADE;
1421
+ DROP TABLEtest. messages,test. replies CASCADE;
1423
1422
NOTICE: drop cascades to 2 other objects
1424
1423
/* 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);
1428
1427
NOTICE: sequence "special_case_1_ind_o_s_seq" does not exist, skipping
1429
1428
create_range_partitions
1430
1429
-------------------------
1431
1430
4
1432
1431
(1 row)
1433
1432
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';
1438
1437
QUERY PLAN
1439
1438
--------------------------------------------------------------------------------------------------
1440
1439
Append
@@ -1444,13 +1443,13 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
1444
1443
Index Cond: ((val < 75) AND (comment = 'a'::text))
1445
1444
(5 rows)
1446
1445
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);
1448
1447
set_enable_parent
1449
1448
-------------------
1450
1449
1451
1450
(1 row)
1452
1451
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';
1454
1453
QUERY PLAN
1455
1454
--------------------------------------------------------------------------------------------------
1456
1455
Append
@@ -1462,13 +1461,13 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
1462
1461
Index Cond: ((val < 75) AND (comment = 'a'::text))
1463
1462
(7 rows)
1464
1463
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);
1466
1465
set_enable_parent
1467
1466
-------------------
1468
1467
1469
1468
(1 row)
1470
1469
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';
1472
1471
QUERY PLAN
1473
1472
--------------------------------------------------------------------------------------------------
1474
1473
Append
@@ -1478,8 +1477,72 @@ EXPLAIN (COSTS OFF) SELECT * FROM special_case_1_ind_o_s WHERE val < 75 AND comm
1478
1477
Index Cond: ((val < 75) AND (comment = 'a'::text))
1479
1478
(5 rows)
1480
1479
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
+
1481
1545
DROP SCHEMA test CASCADE;
1482
- NOTICE: drop cascades to13 other objects
1546
+ NOTICE: drop cascades to45 other objects
1483
1547
DROP EXTENSION pg_pathman CASCADE;
1484
- NOTICE: drop cascades to 3 other objects
1485
1548
DROP SCHEMA pathman CASCADE;