@ -11,12 +11,12 @@ SET search_path = partitions_merge_schema, public;
--
--
-- Test for error codes
-- Test for error codes
--
--
CREATE TABLE sales_range (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_range (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_dec2021 PARTITION OF sales_range FOR VALUES FROM ('2021-12-01') TO ('2021-12-31');
CREATE TABLE sales_dec2021 PARTITION OF sales_range FOR VALUES FROM ('2021-12-01') TO ('2021-12-31');
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_apr2022 (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_apr2022 (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_apr_1 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-04-15');
CREATE TABLE sales_apr_1 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-04-15');
CREATE TABLE sales_apr_2 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-15') TO ('2022-05-01');
CREATE TABLE sales_apr_2 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-15') TO ('2022-05-01');
ALTER TABLE sales_range ATTACH PARTITION sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-05-01');
ALTER TABLE sales_range ATTACH PARTITION sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-05-01');
@ -60,7 +60,7 @@ DROP TABLE sales_range;
--
--
-- Add rows into partitioned table, then merge partitions
-- Add rows into partitioned table, then merge partitions
--
--
CREATE TABLE sales_range (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_range (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
@ -122,68 +122,68 @@ SELECT * FROM pg_indexes WHERE tablename = 'sales_feb_mar_apr2022' and schemanam
(1 row)
(1 row)
SELECT * FROM sales_range;
SELECT * FROM sales_range;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
1 | May | 1000 | 01-31-2022
1 | May | 1000 | 01-31-2022
10 | Halder | 350 | 01-28-2022
10 | Halder | 350 | 01-28-2022
13 | Gandi | 377 | 01-09-2022
13 | Gandi | 377 | 01-09-2022
2 | Smirnoff | 500 | 02-10-2022
2 | Smirnoff | 500 | 02-10-2022
6 | Poirot | 150 | 02-11-2022
6 | Poirot | 150 | 02-11-2022
8 | Ericsson | 185 | 02-23-2022
8 | Ericsson | 185 | 02-23-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
14 | Smith | 510 | 05-04-2022
14 | Smith | 510 | 05-04-2022
(14 rows)
(14 rows)
SELECT * FROM sales_jan2022;
SELECT * FROM sales_jan2022;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
1 | May | 1000 | 01-31-2022
1 | May | 1000 | 01-31-2022
10 | Halder | 350 | 01-28-2022
10 | Halder | 350 | 01-28-2022
13 | Gandi | 377 | 01-09-2022
13 | Gandi | 377 | 01-09-2022
(3 rows)
(3 rows)
SELECT * FROM partitions_merge_schema2.sales_feb_mar_apr2022;
SELECT * FROM partitions_merge_schema2.sales_feb_mar_apr2022;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
2 | Smirnoff | 500 | 02-10-2022
2 | Smirnoff | 500 | 02-10-2022
6 | Poirot | 150 | 02-11-2022
6 | Poirot | 150 | 02-11-2022
8 | Ericsson | 185 | 02-23-2022
8 | Ericsson | 185 | 02-23-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
(10 rows)
(10 rows)
SELECT * FROM sales_others;
SELECT * FROM sales_others;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
14 | Smith | 510 | 05-04-2022
14 | Smith | 510 | 05-04-2022
(1 row)
(1 row)
-- Use indexscan for testing indexes
-- Use indexscan for testing indexes
SET enable_seqscan = OFF;
SET enable_seqscan = OFF;
SELECT * FROM partitions_merge_schema2.sales_feb_mar_apr2022 where sales_date > '2022-01-01';
SELECT * FROM partitions_merge_schema2.sales_feb_mar_apr2022 where sales_date > '2022-01-01';
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
2 | Smirnoff | 500 | 02-10-2022
2 | Smirnoff | 500 | 02-10-2022
6 | Poirot | 150 | 02-11-2022
6 | Poirot | 150 | 02-11-2022
8 | Ericsson | 185 | 02-23-2022
8 | Ericsson | 185 | 02-23-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
(10 rows)
(10 rows)
RESET enable_seqscan;
RESET enable_seqscan;
@ -191,7 +191,7 @@ DROP TABLE sales_range;
--
--
-- Merge some partitions into DEFAULT partition
-- Merge some partitions into DEFAULT partition
--
--
CREATE TABLE sales_range (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_range (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
@ -216,15 +216,15 @@ INSERT INTO sales_range VALUES (14, 'Smith', 510, '2022-05-04');
-- name
-- name
ALTER TABLE sales_range MERGE PARTITIONS (sales_jan2022, sales_mar2022, sales_others) INTO sales_others;
ALTER TABLE sales_range MERGE PARTITIONS (sales_jan2022, sales_mar2022, sales_others) INTO sales_others;
select * from sales_others;
select * from sales_others;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
1 | May | 1000 | 01-31-2022
1 | May | 1000 | 01-31-2022
10 | Halder | 350 | 01-28-2022
10 | Halder | 350 | 01-28-2022
13 | Gandi | 377 | 01-09-2022
13 | Gandi | 377 | 01-09-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
14 | Smith | 510 | 05-04-2022
14 | Smith | 510 | 05-04-2022
(7 rows)
(7 rows)
-- show partitions with conditions:
-- show partitions with conditions:
@ -246,7 +246,7 @@ DROP TABLE sales_range;
-- * GENERATED column;
-- * GENERATED column;
-- * column with DEFAULT value.
-- * column with DEFAULT value.
--
--
CREATE TABLE sales_date (salesma n_name VARCHAR(30), sales_year INT, sales_month INT, sales_day INT,
CREATE TABLE sales_date (salesperso n_name VARCHAR(30), sales_year INT, sales_month INT, sales_day INT,
sales_date VARCHAR(10) GENERATED ALWAYS AS
sales_date VARCHAR(10) GENERATED ALWAYS AS
(LPAD(sales_year::text, 4, '0') || '.' || LPAD(sales_month::text, 2, '0') || '.' || LPAD(sales_day::text, 2, '0')) STORED,
(LPAD(sales_year::text, 4, '0') || '.' || LPAD(sales_month::text, 2, '0') || '.' || LPAD(sales_day::text, 2, '0')) STORED,
sales_department VARCHAR(30) DEFAULT 'Sales department')
sales_department VARCHAR(30) DEFAULT 'Sales department')
@ -255,219 +255,219 @@ CREATE TABLE sales_dec2022 PARTITION OF sales_date FOR VALUES FROM (2021, 12, 1)
CREATE TABLE sales_jan2022 PARTITION OF sales_date FOR VALUES FROM (2022, 1, 1) TO (2022, 2, 1);
CREATE TABLE sales_jan2022 PARTITION OF sales_date FOR VALUES FROM (2022, 1, 1) TO (2022, 2, 1);
CREATE TABLE sales_feb2022 PARTITION OF sales_date FOR VALUES FROM (2022, 2, 1) TO (2022, 3, 1);
CREATE TABLE sales_feb2022 PARTITION OF sales_date FOR VALUES FROM (2022, 2, 1) TO (2022, 3, 1);
CREATE TABLE sales_other PARTITION OF sales_date FOR VALUES FROM (2022, 3, 1) TO (MAXVALUE, MAXVALUE, MAXVALUE);
CREATE TABLE sales_other PARTITION OF sales_date FOR VALUES FROM (2022, 3, 1) TO (MAXVALUE, MAXVALUE, MAXVALUE);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1);
SELECT * FROM sales_date;
SELECT * FROM sales_date;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
(9 rows)
(9 rows)
SELECT * FROM sales_dec2022;
SELECT * FROM sales_dec2022;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
(2 rows)
(2 rows)
SELECT * FROM sales_jan2022;
SELECT * FROM sales_jan2022;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
(2 rows)
(2 rows)
SELECT * FROM sales_feb2022;
SELECT * FROM sales_feb2022;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
(2 rows)
(2 rows)
SELECT * FROM sales_other;
SELECT * FROM sales_other;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
(3 rows)
(3 rows)
ALTER TABLE sales_date MERGE PARTITIONS (sales_jan2022, sales_feb2022) INTO sales_jan_feb2022;
ALTER TABLE sales_date MERGE PARTITIONS (sales_jan2022, sales_feb2022) INTO sales_jan_feb2022;
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10);
INSERT INTO sales_date(salesma n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10);
INSERT INTO sales_date(salesperso n_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10);
SELECT * FROM sales_date;
SELECT * FROM sales_date;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager1 | 2022 | 1 | 10 | 2022.01.10 | Sales department
Manager1 | 2022 | 1 | 10 | 2022.01.10 | Sales department
Manager2 | 2022 | 2 | 10 | 2022.02.10 | Sales department
Manager2 | 2022 | 2 | 10 | 2022.02.10 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
(11 rows)
(11 rows)
SELECT * FROM sales_dec2022;
SELECT * FROM sales_dec2022;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager1 | 2021 | 12 | 7 | 2021.12.07 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
Manager2 | 2021 | 12 | 8 | 2021.12.08 | Sales department
(2 rows)
(2 rows)
SELECT * FROM sales_jan_feb2022;
SELECT * FROM sales_jan_feb2022;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager3 | 2022 | 1 | 1 | 2022.01.01 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager2 | 2022 | 1 | 2 | 2022.01.02 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager1 | 2022 | 2 | 4 | 2022.02.04 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager3 | 2022 | 2 | 1 | 2022.02.01 | Sales department
Manager1 | 2022 | 1 | 10 | 2022.01.10 | Sales department
Manager1 | 2022 | 1 | 10 | 2022.01.10 | Sales department
Manager2 | 2022 | 2 | 10 | 2022.02.10 | Sales department
Manager2 | 2022 | 2 | 10 | 2022.02.10 | Sales department
(6 rows)
(6 rows)
SELECT * FROM sales_other;
SELECT * FROM sales_other;
salesma n_name | sales_year | sales_month | sales_day | sales_date | sales_department
salesperso n_name | sales_year | sales_month | sales_day | sales_date | sales_department
---------------+------------+-------------+-----------+------------+------------------
------------------ +------------+-------------+-----------+------------+------------------
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager1 | 2022 | 3 | 3 | 2022.03.03 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager2 | 2022 | 3 | 4 | 2022.03.04 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
Manager3 | 2022 | 5 | 1 | 2022.05.01 | Sales department
(3 rows)
(3 rows)
DROP TABLE sales_date;
DROP TABLE sales_date;
--
--
-- Test: merge partitions of partitioned table with triggers
-- Test: merge partitions of partitioned table with triggers
--
--
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesma n_id);
CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperso n_id);
CREATE TABLE salesmans01_10 PARTITION OF salesmans FOR VALUES FROM (1) TO (10);
CREATE TABLE salespeople01_10 PARTITION OF salespeople FOR VALUES FROM (1) TO (10);
CREATE TABLE salesmans10_20 PARTITION OF salesmans FOR VALUES FROM (10) TO (20);
CREATE TABLE salespeople10_20 PARTITION OF salespeople FOR VALUES FROM (10) TO (20);
CREATE TABLE salesmans20_30 PARTITION OF salesmans FOR VALUES FROM (20) TO (30);
CREATE TABLE salespeople20_30 PARTITION OF salespeople FOR VALUES FROM (20) TO (30);
CREATE TABLE salesmans30_40 PARTITION OF salesmans FOR VALUES FROM (30) TO (40);
CREATE TABLE salespeople30_40 PARTITION OF salespeople FOR VALUES FROM (30) TO (40);
INSERT INTO salesmans VALUES (1, 'Poirot');
INSERT INTO salespeople VALUES (1, 'Poirot');
CREATE OR REPLACE FUNCTION after_insert_row_trigger() RETURNS trigger LANGUAGE 'plpgsql' AS $BODY$
CREATE OR REPLACE FUNCTION after_insert_row_trigger() RETURNS trigger LANGUAGE 'plpgsql' AS $BODY$
BEGIN
BEGIN
RAISE NOTICE 'trigger(%) called: action = %, when = %, level = %', TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;
RAISE NOTICE 'trigger(%) called: action = %, when = %, level = %', TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;
RETURN NULL;
RETURN NULL;
END;
END;
$BODY$;
$BODY$;
CREATE TRIGGER salesmans _after_insert_statement_trigger
CREATE TRIGGER salespeople _after_insert_statement_trigger
AFTER INSERT
AFTER INSERT
ON salesmans
ON salespeople
FOR EACH STATEMENT
FOR EACH STATEMENT
EXECUTE PROCEDURE after_insert_row_trigger('salesmans ');
EXECUTE PROCEDURE after_insert_row_trigger('salespeople ');
CREATE TRIGGER salesmans _after_insert_row_trigger
CREATE TRIGGER salespeople _after_insert_row_trigger
AFTER INSERT
AFTER INSERT
ON salesmans
ON salespeople
FOR EACH ROW
FOR EACH ROW
EXECUTE PROCEDURE after_insert_row_trigger('salesmans ');
EXECUTE PROCEDURE after_insert_row_trigger('salespeople ');
-- 2 triggers should fire here (row + statement):
-- 2 triggers should fire here (row + statement):
INSERT INTO salesmans VALUES (10, 'May');
INSERT INTO salespeople VALUES (10, 'May');
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = STATEMENT
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = STATEMENT
-- 1 trigger should fire here (row):
-- 1 trigger should fire here (row):
INSERT INTO salesmans 10_20 VALUES (19, 'Ivanov');
INSERT INTO salespeople 10_20 VALUES (19, 'Ivanov');
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = ROW
ALTER TABLE salesmans MERGE PARTITIONS (salesmans10_20, salesmans20_30, salesmans30_40) INTO salesmans 10_40;
ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople 10_40;
-- 2 triggers should fire here (row + statement):
-- 2 triggers should fire here (row + statement):
INSERT INTO salesmans VALUES (20, 'Smirnoff');
INSERT INTO salespeople VALUES (20, 'Smirnoff');
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = STATEMENT
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = STATEMENT
-- 1 trigger should fire here (row):
-- 1 trigger should fire here (row):
INSERT INTO salesmans 10_40 VALUES (30, 'Ford');
INSERT INTO salespeople 10_40 VALUES (30, 'Ford');
NOTICE: trigger(salesmans ) called: action = INSERT, when = AFTER, level = ROW
NOTICE: trigger(salespeople ) called: action = INSERT, when = AFTER, level = ROW
SELECT * FROM salesmans 01_10;
SELECT * FROM salespeople 01_10;
salesman_id | salesma n_name
salesperson_id | salesperso n_name
-------------+---------------
---------------- +--- ---------------
1 | Poirot
1 | Poirot
(1 row)
(1 row)
SELECT * FROM salesmans 10_40;
SELECT * FROM salespeople 10_40;
salesman_id | salesma n_name
salesperson_id | salesperso n_name
-------------+---------------
---------------- +--- ---------------
10 | May
10 | May
19 | Ivanov
19 | Ivanov
20 | Smirnoff
20 | Smirnoff
30 | Ford
30 | Ford
(4 rows)
(4 rows)
DROP TABLE salesmans ;
DROP TABLE salespeople ;
DROP FUNCTION after_insert_row_trigger();
DROP FUNCTION after_insert_row_trigger();
--
--
-- Test: merge partitions with deleted columns
-- Test: merge partitions with deleted columns
--
--
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesma n_id);
CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperso n_id);
CREATE TABLE salesmans01_10 PARTITION OF salesmans FOR VALUES FROM (1) TO (10);
CREATE TABLE salespeople01_10 PARTITION OF salespeople FOR VALUES FROM (1) TO (10);
-- Create partitions with some deleted columns:
-- Create partitions with some deleted columns:
CREATE TABLE salesmans10_20(d1 VARCHAR(30), salesman_id INT PRIMARY KEY, salesma n_name VARCHAR(30));
CREATE TABLE salespeople10_20(d1 VARCHAR(30), salesperson_id INT PRIMARY KEY, salesperso n_name VARCHAR(30));
CREATE TABLE salesmans20_30(salesman_id INT PRIMARY KEY, d2 INT, salesma n_name VARCHAR(30));
CREATE TABLE salespeople20_30(salesperson_id INT PRIMARY KEY, d2 INT, salesperso n_name VARCHAR(30));
CREATE TABLE salesmans30_40(salesman_id INT PRIMARY KEY, d3 DATE, salesma n_name VARCHAR(30));
CREATE TABLE salespeople30_40(salesperson_id INT PRIMARY KEY, d3 DATE, salesperso n_name VARCHAR(30));
INSERT INTO salesmans 10_20 VALUES ('dummy value 1', 19, 'Ivanov');
INSERT INTO salespeople 10_20 VALUES ('dummy value 1', 19, 'Ivanov');
INSERT INTO salesmans 20_30 VALUES (20, 101, 'Smirnoff');
INSERT INTO salespeople 20_30 VALUES (20, 101, 'Smirnoff');
INSERT INTO salesmans 30_40 VALUES (31, now(), 'Popov');
INSERT INTO salespeople 30_40 VALUES (31, now(), 'Popov');
ALTER TABLE salesmans 10_20 DROP COLUMN d1;
ALTER TABLE salespeople 10_20 DROP COLUMN d1;
ALTER TABLE salesmans 20_30 DROP COLUMN d2;
ALTER TABLE salespeople 20_30 DROP COLUMN d2;
ALTER TABLE salesmans 30_40 DROP COLUMN d3;
ALTER TABLE salespeople 30_40 DROP COLUMN d3;
ALTER TABLE salesmans ATTACH PARTITION salesmans 10_20 FOR VALUES FROM (10) TO (20);
ALTER TABLE salespeople ATTACH PARTITION salespeople 10_20 FOR VALUES FROM (10) TO (20);
ALTER TABLE salesmans ATTACH PARTITION salesmans 20_30 FOR VALUES FROM (20) TO (30);
ALTER TABLE salespeople ATTACH PARTITION salespeople 20_30 FOR VALUES FROM (20) TO (30);
ALTER TABLE salesmans ATTACH PARTITION salesmans 30_40 FOR VALUES FROM (30) TO (40);
ALTER TABLE salespeople ATTACH PARTITION salespeople 30_40 FOR VALUES FROM (30) TO (40);
INSERT INTO salesmans VALUES (1, 'Poirot');
INSERT INTO salespeople VALUES (1, 'Poirot');
INSERT INTO salesmans VALUES (10, 'May');
INSERT INTO salespeople VALUES (10, 'May');
INSERT INTO salesmans VALUES (30, 'Ford');
INSERT INTO salespeople VALUES (30, 'Ford');
ALTER TABLE salesmans MERGE PARTITIONS (salesmans10_20, salesmans20_30, salesmans30_40) INTO salesmans 10_40;
ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople 10_40;
select * from salesmans ;
select * from salespeople ;
salesman_id | salesma n_name
salesperson_id | salesperso n_name
-------------+---------------
---------------- +--- ---------------
1 | Poirot
1 | Poirot
19 | Ivanov
19 | Ivanov
10 | May
10 | May
20 | Smirnoff
20 | Smirnoff
31 | Popov
31 | Popov
30 | Ford
30 | Ford
(6 rows)
(6 rows)
select * from salesmans 01_10;
select * from salespeople 01_10;
salesman_id | salesma n_name
salesperson_id | salesperso n_name
-------------+---------------
---------------- +--- ---------------
1 | Poirot
1 | Poirot
(1 row)
(1 row)
select * from salesmans 10_40;
select * from salespeople 10_40;
salesman_id | salesma n_name
salesperson_id | salesperso n_name
-------------+---------------
---------------- +--- ---------------
19 | Ivanov
19 | Ivanov
10 | May
10 | May
20 | Smirnoff
20 | Smirnoff
31 | Popov
31 | Popov
30 | Ford
30 | Ford
(5 rows)
(5 rows)
DROP TABLE salesmans ;
DROP TABLE salespeople ;
--
--
-- Test: merge sub-partitions
-- Test: merge sub-partitions
--
--
CREATE TABLE sales_range (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_range (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_jan2022 PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-02-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_feb2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-03-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_mar2022 PARTITION OF sales_range FOR VALUES FROM ('2022-03-01') TO ('2022-04-01');
CREATE TABLE sales_apr2022 (salesman_id INT, salesma n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_apr2022 (salesperson_id INT, salesperso n_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_apr2022_01_10 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-04-10');
CREATE TABLE sales_apr2022_01_10 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-04-10');
CREATE TABLE sales_apr2022_10_20 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-10') TO ('2022-04-20');
CREATE TABLE sales_apr2022_10_20 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-10') TO ('2022-04-20');
CREATE TABLE sales_apr2022_20_30 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-20') TO ('2022-05-01');
CREATE TABLE sales_apr2022_20_30 PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-20') TO ('2022-05-01');
@ -489,88 +489,88 @@ INSERT INTO sales_range VALUES (12, 'Plato', 350, '2022-03-19');
INSERT INTO sales_range VALUES (13, 'Gandi', 377, '2022-01-09');
INSERT INTO sales_range VALUES (13, 'Gandi', 377, '2022-01-09');
INSERT INTO sales_range VALUES (14, 'Smith', 510, '2022-05-04');
INSERT INTO sales_range VALUES (14, 'Smith', 510, '2022-05-04');
SELECT * FROM sales_range;
SELECT * FROM sales_range;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
1 | May | 1000 | 01-31-2022
1 | May | 1000 | 01-31-2022
10 | Halder | 350 | 01-28-2022
10 | Halder | 350 | 01-28-2022
13 | Gandi | 377 | 01-09-2022
13 | Gandi | 377 | 01-09-2022
2 | Smirnoff | 500 | 02-10-2022
2 | Smirnoff | 500 | 02-10-2022
6 | Poirot | 150 | 02-11-2022
6 | Poirot | 150 | 02-11-2022
8 | Ericsson | 185 | 02-23-2022
8 | Ericsson | 185 | 02-23-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
14 | Smith | 510 | 05-04-2022
14 | Smith | 510 | 05-04-2022
(14 rows)
(14 rows)
SELECT * FROM sales_apr2022;
SELECT * FROM sales_apr2022;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
(4 rows)
(4 rows)
SELECT * FROM sales_apr2022_01_10;
SELECT * FROM sales_apr2022_01_10;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
(2 rows)
(2 rows)
SELECT * FROM sales_apr2022_10_20;
SELECT * FROM sales_apr2022_10_20;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
(1 row)
(1 row)
SELECT * FROM sales_apr2022_20_30;
SELECT * FROM sales_apr2022_20_30;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
(1 row)
(1 row)
ALTER TABLE sales_apr2022 MERGE PARTITIONS (sales_apr2022_01_10, sales_apr2022_10_20, sales_apr2022_20_30) INTO sales_apr_all;
ALTER TABLE sales_apr2022 MERGE PARTITIONS (sales_apr2022_01_10, sales_apr2022_10_20, sales_apr2022_20_30) INTO sales_apr_all;
SELECT * FROM sales_range;
SELECT * FROM sales_range;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
1 | May | 1000 | 01-31-2022
1 | May | 1000 | 01-31-2022
10 | Halder | 350 | 01-28-2022
10 | Halder | 350 | 01-28-2022
13 | Gandi | 377 | 01-09-2022
13 | Gandi | 377 | 01-09-2022
2 | Smirnoff | 500 | 02-10-2022
2 | Smirnoff | 500 | 02-10-2022
6 | Poirot | 150 | 02-11-2022
6 | Poirot | 150 | 02-11-2022
8 | Ericsson | 185 | 02-23-2022
8 | Ericsson | 185 | 02-23-2022
7 | Li | 175 | 03-08-2022
7 | Li | 175 | 03-08-2022
9 | Muller | 250 | 03-11-2022
9 | Muller | 250 | 03-11-2022
12 | Plato | 350 | 03-19-2022
12 | Plato | 350 | 03-19-2022
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
14 | Smith | 510 | 05-04-2022
14 | Smith | 510 | 05-04-2022
(14 rows)
(14 rows)
SELECT * FROM sales_apr2022;
SELECT * FROM sales_apr2022;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
(4 rows)
(4 rows)
SELECT * FROM sales_apr_all;
SELECT * FROM sales_apr_all;
salesman_id | salesma n_name | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_amount | sales_date
-------------+---------------+--------------+------------
---------------- +--- ---------------+--------------+------------
5 | Deev | 250 | 04-07-2022
5 | Deev | 250 | 04-07-2022
11 | Trump | 380 | 04-06-2022
11 | Trump | 380 | 04-06-2022
4 | Ivanov | 750 | 04-13-2022
4 | Ivanov | 750 | 04-13-2022
3 | Ford | 2000 | 04-30-2022
3 | Ford | 2000 | 04-30-2022
(4 rows)
(4 rows)
DROP TABLE sales_range;
DROP TABLE sales_range;
@ -581,8 +581,8 @@ DROP TABLE sales_range;
-- Test: specific errors for BY LIST partitioning
-- Test: specific errors for BY LIST partitioning
--
--
CREATE TABLE sales_list
CREATE TABLE sales_list
(salesma n_id INT GENERATED ALWAYS AS IDENTITY,
(salesperso n_id INT GENERATED ALWAYS AS IDENTITY,
salesma n_name VARCHAR(30),
salesperso n_name VARCHAR(30),
sales_state VARCHAR(20),
sales_state VARCHAR(20),
sales_amount INT,
sales_amount INT,
sales_date DATE)
sales_date DATE)
@ -614,33 +614,33 @@ DROP TABLE sales_list;
-- Test: BY LIST partitioning, MERGE PARTITIONS with data
-- Test: BY LIST partitioning, MERGE PARTITIONS with data
--
--
CREATE TABLE sales_list
CREATE TABLE sales_list
(salesma n_id INT GENERATED ALWAYS AS IDENTITY,
(salesperso n_id INT GENERATED ALWAYS AS IDENTITY,
salesma n_name VARCHAR(30),
salesperso n_name VARCHAR(30),
sales_state VARCHAR(20),
sales_state VARCHAR(20),
sales_amount INT,
sales_amount INT,
sales_date DATE)
sales_date DATE)
PARTITION BY LIST (sales_state);
PARTITION BY LIST (sales_state);
CREATE INDEX sales_list_salesman_name_idx ON sales_list USING btree (salesma n_name);
CREATE INDEX sales_list_salesperson_name_idx ON sales_list USING btree (salesperso n_name);
CREATE INDEX sales_list_sales_state_idx ON sales_list USING btree (sales_state);
CREATE INDEX sales_list_sales_state_idx ON sales_list USING btree (sales_state);
CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Oslo', 'St. Petersburg', 'Helsinki');
CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Oslo', 'St. Petersburg', 'Helsinki');
CREATE TABLE sales_west PARTITION OF sales_list FOR VALUES IN ('Lisbon', 'New York', 'Madrid');
CREATE TABLE sales_west PARTITION OF sales_list FOR VALUES IN ('Lisbon', 'New York', 'Madrid');
CREATE TABLE sales_east PARTITION OF sales_list FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok');
CREATE TABLE sales_east PARTITION OF sales_list FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok');
CREATE TABLE sales_central PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Berlin', 'Kyiv');
CREATE TABLE sales_central PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Berlin', 'Kyiv');
CREATE TABLE sales_others PARTITION OF sales_list DEFAULT;
CREATE TABLE sales_others PARTITION OF sales_list DEFAULT;
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08');
INSERT INTO sales_list (salesma n_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05');
INSERT INTO sales_list (salesperso n_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05');
-- show partitions with conditions:
-- show partitions with conditions:
SELECT c.oid::pg_catalog.regclass, c.relkind, inhdetachpending, pg_catalog.pg_get_expr(c.relpartbound, c.oid)
SELECT c.oid::pg_catalog.regclass, c.relkind, inhdetachpending, pg_catalog.pg_get_expr(c.relpartbound, c.oid)
FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i
FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i
@ -669,68 +669,68 @@ SELECT c.oid::pg_catalog.regclass, c.relkind, inhdetachpending, pg_catalog.pg_ge
(3 rows)
(3 rows)
SELECT * FROM sales_list;
SELECT * FROM sales_list;
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+----------------+--------------+------------
---------------- +--- ---------------+----------------+--------------+------------
2 | Smirnoff | New York | 500 | 03-03-2022
2 | Smirnoff | New York | 500 | 03-03-2022
5 | Deev | Lisbon | 250 | 03-07-2022
5 | Deev | Lisbon | 250 | 03-07-2022
11 | Muller | Madrid | 650 | 03-05-2022
11 | Muller | Madrid | 650 | 03-05-2022
14 | Plato | Lisbon | 950 | 03-05-2022
14 | Plato | Lisbon | 950 | 03-05-2022
1 | Trump | Bejing | 1000 | 03-01-2022
1 | Trump | Bejing | 1000 | 03-01-2022
8 | Li | Vladivostok | 1150 | 03-09-2022
8 | Li | Vladivostok | 1150 | 03-09-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
6 | Poirot | Berlin | 1000 | 03-01-2022
6 | Poirot | Berlin | 1000 | 03-01-2022
12 | Smith | Kyiv | 350 | 03-10-2022
12 | Smith | Kyiv | 350 | 03-10-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
3 | Ford | St. Petersburg | 2000 | 03-05-2022
3 | Ford | St. Petersburg | 2000 | 03-05-2022
7 | May | Helsinki | 1200 | 03-06-2022
7 | May | Helsinki | 1200 | 03-06-2022
9 | May | Helsinki | 1200 | 03-11-2022
9 | May | Helsinki | 1200 | 03-11-2022
10 | Halder | Oslo | 800 | 03-02-2022
10 | Halder | Oslo | 800 | 03-02-2022
(14 rows)
(14 rows)
SELECT * FROM sales_nord;
SELECT * FROM sales_nord;
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+----------------+--------------+------------
---------------- +--- ---------------+----------------+--------------+------------
3 | Ford | St. Petersburg | 2000 | 03-05-2022
3 | Ford | St. Petersburg | 2000 | 03-05-2022
7 | May | Helsinki | 1200 | 03-06-2022
7 | May | Helsinki | 1200 | 03-06-2022
9 | May | Helsinki | 1200 | 03-11-2022
9 | May | Helsinki | 1200 | 03-11-2022
10 | Halder | Oslo | 800 | 03-02-2022
10 | Halder | Oslo | 800 | 03-02-2022
(4 rows)
(4 rows)
SELECT * FROM sales_all;
SELECT * FROM sales_all;
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+-------------+--------------+------------
---------------- +--- ---------------+-------------+--------------+------------
2 | Smirnoff | New York | 500 | 03-03-2022
2 | Smirnoff | New York | 500 | 03-03-2022
5 | Deev | Lisbon | 250 | 03-07-2022
5 | Deev | Lisbon | 250 | 03-07-2022
11 | Muller | Madrid | 650 | 03-05-2022
11 | Muller | Madrid | 650 | 03-05-2022
14 | Plato | Lisbon | 950 | 03-05-2022
14 | Plato | Lisbon | 950 | 03-05-2022
1 | Trump | Bejing | 1000 | 03-01-2022
1 | Trump | Bejing | 1000 | 03-01-2022
8 | Li | Vladivostok | 1150 | 03-09-2022
8 | Li | Vladivostok | 1150 | 03-09-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
6 | Poirot | Berlin | 1000 | 03-01-2022
6 | Poirot | Berlin | 1000 | 03-01-2022
12 | Smith | Kyiv | 350 | 03-10-2022
12 | Smith | Kyiv | 350 | 03-10-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
(10 rows)
(10 rows)
-- Use indexscan for testing indexes after merging partitions
-- Use indexscan for testing indexes after merging partitions
SET enable_seqscan = OFF;
SET enable_seqscan = OFF;
SELECT * FROM sales_all WHERE sales_state = 'Warsaw';
SELECT * FROM sales_all WHERE sales_state = 'Warsaw';
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+-------------+--------------+------------
---------------- +--- ---------------+-------------+--------------+------------
4 | Ivanov | Warsaw | 750 | 03-04-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
(2 rows)
(2 rows)
SELECT * FROM sales_list WHERE sales_state = 'Warsaw';
SELECT * FROM sales_list WHERE sales_state = 'Warsaw';
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+-------------+--------------+------------
---------------- +--- ---------------+-------------+--------------+------------
4 | Ivanov | Warsaw | 750 | 03-04-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
13 | Gandi | Warsaw | 150 | 03-08-2022
(2 rows)
(2 rows)
SELECT * FROM sales_list WHERE salesma n_name = 'Ivanov';
SELECT * FROM sales_list WHERE salesperso n_name = 'Ivanov';
salesman_id | salesma n_name | sales_state | sales_amount | sales_date
salesperson_id | salesperso n_name | sales_state | sales_amount | sales_date
-------------+---------------+-------------+--------------+------------
---------------- +--- ---------------+-------------+--------------+------------
4 | Ivanov | Warsaw | 750 | 03-04-2022
4 | Ivanov | Warsaw | 750 | 03-04-2022
(1 row)
(1 row)
RESET enable_seqscan;
RESET enable_seqscan;