Rename tables in tests of partition MERGE/SPLIT operations

Replace "salesman" with "salesperson", "salesmen" with "salespeople".  The
names are both gramatically correct and gender-neutral.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/fdaa003e-919c-cbc9-4f0c-e4546e96bd65%40gmail.com
Reviewed-by: Robert Haas, Pavel Borisov
This commit is contained in:
Alexander Korotkov 2024-04-30 11:55:07 +03:00
parent 96c7381c4c
commit f4fc7cb54b
4 changed files with 1186 additions and 1186 deletions

View File

@ -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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_apr2022 (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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,8 +122,8 @@ 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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -141,16 +141,16 @@ SELECT * FROM sales_range;
(14 rows) (14 rows)
SELECT * FROM sales_jan2022; SELECT * FROM sales_jan2022;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -164,16 +164,16 @@ SELECT * FROM partitions_merge_schema2.sales_feb_mar_apr2022;
(10 rows) (10 rows)
SELECT * FROM sales_others; SELECT * FROM sales_others;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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,8 +216,8 @@ 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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -246,7 +246,7 @@ DROP TABLE sales_range;
-- * GENERATED column; -- * GENERATED column;
-- * column with DEFAULT value. -- * column with DEFAULT value.
-- --
CREATE TABLE sales_date (salesman_name VARCHAR(30), sales_year INT, sales_month INT, sales_day INT, CREATE TABLE sales_date (salesperson_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,18 +255,18 @@ 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(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1);
SELECT * FROM sales_date; SELECT * FROM sales_date;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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
@ -279,40 +279,40 @@ SELECT * FROM sales_date;
(9 rows) (9 rows)
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10);
SELECT * FROM sales_date; SELECT * FROM sales_date;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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
@ -327,15 +327,15 @@ SELECT * FROM sales_date;
(11 rows) (11 rows)
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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
@ -345,8 +345,8 @@ SELECT * FROM sales_jan_feb2022;
(6 rows) (6 rows)
SELECT * FROM sales_other; SELECT * FROM sales_other;
salesman_name | sales_year | sales_month | sales_day | sales_date | sales_department salesperson_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
@ -356,85 +356,85 @@ 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 (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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 salesmans10_20 VALUES (19, 'Ivanov'); INSERT INTO salespeople10_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 salesmans10_40; ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople10_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 salesmans10_40 VALUES (30, 'Ford'); INSERT INTO salespeople10_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 salesmans01_10; SELECT * FROM salespeople01_10;
salesman_id | salesman_name salesperson_id | salesperson_name
-------------+--------------- ----------------+------------------
1 | Poirot 1 | Poirot
(1 row) (1 row)
SELECT * FROM salesmans10_40; SELECT * FROM salespeople10_40;
salesman_id | salesman_name salesperson_id | salesperson_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 (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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, salesman_name VARCHAR(30)); CREATE TABLE salespeople10_20(d1 VARCHAR(30), salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30));
CREATE TABLE salesmans20_30(salesman_id INT PRIMARY KEY, d2 INT, salesman_name VARCHAR(30)); CREATE TABLE salespeople20_30(salesperson_id INT PRIMARY KEY, d2 INT, salesperson_name VARCHAR(30));
CREATE TABLE salesmans30_40(salesman_id INT PRIMARY KEY, d3 DATE, salesman_name VARCHAR(30)); CREATE TABLE salespeople30_40(salesperson_id INT PRIMARY KEY, d3 DATE, salesperson_name VARCHAR(30));
INSERT INTO salesmans10_20 VALUES ('dummy value 1', 19, 'Ivanov'); INSERT INTO salespeople10_20 VALUES ('dummy value 1', 19, 'Ivanov');
INSERT INTO salesmans20_30 VALUES (20, 101, 'Smirnoff'); INSERT INTO salespeople20_30 VALUES (20, 101, 'Smirnoff');
INSERT INTO salesmans30_40 VALUES (31, now(), 'Popov'); INSERT INTO salespeople30_40 VALUES (31, now(), 'Popov');
ALTER TABLE salesmans10_20 DROP COLUMN d1; ALTER TABLE salespeople10_20 DROP COLUMN d1;
ALTER TABLE salesmans20_30 DROP COLUMN d2; ALTER TABLE salespeople20_30 DROP COLUMN d2;
ALTER TABLE salesmans30_40 DROP COLUMN d3; ALTER TABLE salespeople30_40 DROP COLUMN d3;
ALTER TABLE salesmans ATTACH PARTITION salesmans10_20 FOR VALUES FROM (10) TO (20); ALTER TABLE salespeople ATTACH PARTITION salespeople10_20 FOR VALUES FROM (10) TO (20);
ALTER TABLE salesmans ATTACH PARTITION salesmans20_30 FOR VALUES FROM (20) TO (30); ALTER TABLE salespeople ATTACH PARTITION salespeople20_30 FOR VALUES FROM (20) TO (30);
ALTER TABLE salesmans ATTACH PARTITION salesmans30_40 FOR VALUES FROM (30) TO (40); ALTER TABLE salespeople ATTACH PARTITION salespeople30_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 salesmans10_40; ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople10_40;
select * from salesmans; select * from salespeople;
salesman_id | salesman_name salesperson_id | salesperson_name
-------------+--------------- ----------------+------------------
1 | Poirot 1 | Poirot
19 | Ivanov 19 | Ivanov
10 | May 10 | May
@ -443,15 +443,15 @@ select * from salesmans;
30 | Ford 30 | Ford
(6 rows) (6 rows)
select * from salesmans01_10; select * from salespeople01_10;
salesman_id | salesman_name salesperson_id | salesperson_name
-------------+--------------- ----------------+------------------
1 | Poirot 1 | Poirot
(1 row) (1 row)
select * from salesmans10_40; select * from salespeople10_40;
salesman_id | salesman_name salesperson_id | salesperson_name
-------------+--------------- ----------------+------------------
19 | Ivanov 19 | Ivanov
10 | May 10 | May
20 | Smirnoff 20 | Smirnoff
@ -459,15 +459,15 @@ select * from salesmans10_40;
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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_apr2022 (salesperson_id INT, salesperson_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,8 +489,8 @@ 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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -508,8 +508,8 @@ SELECT * FROM sales_range;
(14 rows) (14 rows)
SELECT * FROM sales_apr2022; SELECT * FROM sales_apr2022;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -517,28 +517,28 @@ SELECT * FROM sales_apr2022;
(4 rows) (4 rows)
SELECT * FROM sales_apr2022_01_10; SELECT * FROM sales_apr2022_01_10;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -556,8 +556,8 @@ SELECT * FROM sales_range;
(14 rows) (14 rows)
SELECT * FROM sales_apr2022; SELECT * FROM sales_apr2022;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -565,8 +565,8 @@ SELECT * FROM sales_apr2022;
(4 rows) (4 rows)
SELECT * FROM sales_apr_all; SELECT * FROM sales_apr_all;
salesman_id | salesman_name | sales_amount | sales_date salesperson_id | salesperson_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
@ -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
(salesman_id INT GENERATED ALWAYS AS IDENTITY, (salesperson_id INT GENERATED ALWAYS AS IDENTITY,
salesman_name VARCHAR(30), salesperson_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
(salesman_id INT GENERATED ALWAYS AS IDENTITY, (salesperson_id INT GENERATED ALWAYS AS IDENTITY,
salesman_name VARCHAR(30), salesperson_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 (salesman_name); CREATE INDEX sales_list_salesperson_name_idx ON sales_list USING btree (salesperson_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 (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05'); INSERT INTO sales_list (salesperson_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,8 +669,8 @@ 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 | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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
@ -688,8 +688,8 @@ SELECT * FROM sales_list;
(14 rows) (14 rows)
SELECT * FROM sales_nord; SELECT * FROM sales_nord;
salesman_id | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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
@ -697,8 +697,8 @@ SELECT * FROM sales_nord;
(4 rows) (4 rows)
SELECT * FROM sales_all; SELECT * FROM sales_all;
salesman_id | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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
@ -714,22 +714,22 @@ SELECT * FROM sales_all;
-- 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 | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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 | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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 salesman_name = 'Ivanov'; SELECT * FROM sales_list WHERE salesperson_name = 'Ivanov';
salesman_id | salesman_name | sales_state | sales_amount | sales_date salesperson_id | salesperson_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)

File diff suppressed because it is too large Load Diff

View File

@ -14,13 +14,13 @@ SET search_path = partitions_merge_schema, public;
-- --
-- Test for error codes -- Test for error codes
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_apr2022 (salesperson_id INT, salesperson_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');
@ -56,7 +56,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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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');
@ -115,7 +115,7 @@ DROP TABLE sales_range;
-- --
-- Merge some partitions into DEFAULT partition -- Merge some partitions into DEFAULT partition
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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');
@ -158,7 +158,7 @@ DROP TABLE sales_range;
-- * GENERATED column; -- * GENERATED column;
-- * column with DEFAULT value. -- * column with DEFAULT value.
-- --
CREATE TABLE sales_date (salesman_name VARCHAR(30), sales_year INT, sales_month INT, sales_day INT, CREATE TABLE sales_date (salesperson_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')
@ -169,15 +169,15 @@ CREATE TABLE sales_jan2022 PARTITION OF sales_date FOR VALUES FROM (2022, 1, 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(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1);
SELECT * FROM sales_date; SELECT * FROM sales_date;
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
@ -187,8 +187,8 @@ SELECT * FROM sales_other;
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(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10);
SELECT * FROM sales_date; SELECT * FROM sales_date;
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
@ -200,14 +200,14 @@ 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 (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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
@ -216,80 +216,80 @@ BEGIN
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');
-- 1 trigger should fire here (row): -- 1 trigger should fire here (row):
INSERT INTO salesmans10_20 VALUES (19, 'Ivanov'); INSERT INTO salespeople10_20 VALUES (19, 'Ivanov');
ALTER TABLE salesmans MERGE PARTITIONS (salesmans10_20, salesmans20_30, salesmans30_40) INTO salesmans10_40; ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople10_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');
-- 1 trigger should fire here (row): -- 1 trigger should fire here (row):
INSERT INTO salesmans10_40 VALUES (30, 'Ford'); INSERT INTO salespeople10_40 VALUES (30, 'Ford');
SELECT * FROM salesmans01_10; SELECT * FROM salespeople01_10;
SELECT * FROM salesmans10_40; SELECT * FROM salespeople10_40;
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 (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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, salesman_name VARCHAR(30)); CREATE TABLE salespeople10_20(d1 VARCHAR(30), salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30));
CREATE TABLE salesmans20_30(salesman_id INT PRIMARY KEY, d2 INT, salesman_name VARCHAR(30)); CREATE TABLE salespeople20_30(salesperson_id INT PRIMARY KEY, d2 INT, salesperson_name VARCHAR(30));
CREATE TABLE salesmans30_40(salesman_id INT PRIMARY KEY, d3 DATE, salesman_name VARCHAR(30)); CREATE TABLE salespeople30_40(salesperson_id INT PRIMARY KEY, d3 DATE, salesperson_name VARCHAR(30));
INSERT INTO salesmans10_20 VALUES ('dummy value 1', 19, 'Ivanov'); INSERT INTO salespeople10_20 VALUES ('dummy value 1', 19, 'Ivanov');
INSERT INTO salesmans20_30 VALUES (20, 101, 'Smirnoff'); INSERT INTO salespeople20_30 VALUES (20, 101, 'Smirnoff');
INSERT INTO salesmans30_40 VALUES (31, now(), 'Popov'); INSERT INTO salespeople30_40 VALUES (31, now(), 'Popov');
ALTER TABLE salesmans10_20 DROP COLUMN d1; ALTER TABLE salespeople10_20 DROP COLUMN d1;
ALTER TABLE salesmans20_30 DROP COLUMN d2; ALTER TABLE salespeople20_30 DROP COLUMN d2;
ALTER TABLE salesmans30_40 DROP COLUMN d3; ALTER TABLE salespeople30_40 DROP COLUMN d3;
ALTER TABLE salesmans ATTACH PARTITION salesmans10_20 FOR VALUES FROM (10) TO (20); ALTER TABLE salespeople ATTACH PARTITION salespeople10_20 FOR VALUES FROM (10) TO (20);
ALTER TABLE salesmans ATTACH PARTITION salesmans20_30 FOR VALUES FROM (20) TO (30); ALTER TABLE salespeople ATTACH PARTITION salespeople20_30 FOR VALUES FROM (20) TO (30);
ALTER TABLE salesmans ATTACH PARTITION salesmans30_40 FOR VALUES FROM (30) TO (40); ALTER TABLE salespeople ATTACH PARTITION salespeople30_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 salesmans10_40; ALTER TABLE salespeople MERGE PARTITIONS (salespeople10_20, salespeople20_30, salespeople30_40) INTO salespeople10_40;
select * from salesmans; select * from salespeople;
select * from salesmans01_10; select * from salespeople01_10;
select * from salesmans10_40; select * from salespeople10_40;
DROP TABLE salesmans; DROP TABLE salespeople;
-- --
-- Test: merge sub-partitions -- Test: merge sub-partitions
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_apr2022 (salesperson_id INT, salesperson_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');
@ -336,8 +336,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
(salesman_id INT GENERATED ALWAYS AS IDENTITY, (salesperson_id INT GENERATED ALWAYS AS IDENTITY,
salesman_name VARCHAR(30), salesperson_name VARCHAR(30),
sales_state VARCHAR(20), sales_state VARCHAR(20),
sales_amount INT, sales_amount INT,
sales_date DATE) sales_date DATE)
@ -373,14 +373,14 @@ 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
(salesman_id INT GENERATED ALWAYS AS IDENTITY, (salesperson_id INT GENERATED ALWAYS AS IDENTITY,
salesman_name VARCHAR(30), salesperson_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 (salesman_name); CREATE INDEX sales_list_salesperson_name_idx ON sales_list USING btree (salesperson_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');
@ -389,20 +389,20 @@ CREATE TABLE sales_east PARTITION OF sales_list FOR VALUES IN ('Bejing', 'Delhi'
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 (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-06');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Helsinki', 1200, '2022-03-11');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Oslo', 800, '2022-03-02');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05'); INSERT INTO sales_list (salesperson_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)
@ -427,7 +427,7 @@ SET enable_seqscan = OFF;
SELECT * FROM sales_all WHERE sales_state = 'Warsaw'; SELECT * FROM sales_all WHERE sales_state = 'Warsaw';
SELECT * FROM sales_list WHERE sales_state = 'Warsaw'; SELECT * FROM sales_list WHERE sales_state = 'Warsaw';
SELECT * FROM sales_list WHERE salesman_name = 'Ivanov'; SELECT * FROM sales_list WHERE salesperson_name = 'Ivanov';
RESET enable_seqscan; RESET enable_seqscan;

View File

@ -14,7 +14,7 @@ SET search_path = partition_split_schema, public;
-- --
-- Test for error codes -- Test for error codes
-- --
CREATE TABLE sales_range (salesman_id int, salesman_name varchar(30), sales_amount int, sales_date date) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id int, salesperson_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_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01'); CREATE TABLE sales_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01');
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
@ -109,7 +109,7 @@ DROP TABLE sales_others;
-- --
-- Add rows into partitioned table then split partition -- Add rows into partitioned table then split partition
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01'); CREATE TABLE sales_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01');
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
@ -146,7 +146,7 @@ DROP TABLE sales_range CASCADE;
-- --
-- Add split partition, then add rows into partitioned table -- Add split partition, then add rows into partitioned table
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01'); CREATE TABLE sales_feb_mar_apr2022 PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01');
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
@ -188,7 +188,7 @@ DROP TABLE sales_range CASCADE;
-- * GENERATED column; -- * GENERATED column;
-- * column with DEFAULT value. -- * column with DEFAULT value.
-- --
CREATE TABLE sales_date (salesman_name VARCHAR(30), sales_year INT, sales_month INT, sales_day INT, CREATE TABLE sales_date (salesperson_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')
@ -198,15 +198,15 @@ CREATE TABLE sales_dec2022 PARTITION OF sales_date FOR VALUES FROM (2021, 12, 1)
CREATE TABLE sales_jan_feb2022 PARTITION OF sales_date FOR VALUES FROM (2022, 1, 1) TO (2022, 3, 1); CREATE TABLE sales_jan_feb2022 PARTITION OF sales_date FOR VALUES FROM (2022, 1, 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(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2021, 12, 7);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2021, 12, 8);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 1, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 2, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 1, 2);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 2, 1);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 3, 3);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 3, 4);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager3', 2022, 5, 1);
SELECT * FROM sales_date; SELECT * FROM sales_date;
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
@ -217,8 +217,8 @@ ALTER TABLE sales_date SPLIT PARTITION sales_jan_feb2022 INTO
(PARTITION sales_jan2022 FOR VALUES FROM (2022, 1, 1) TO (2022, 2, 1), (PARTITION sales_jan2022 FOR VALUES FROM (2022, 1, 1) TO (2022, 2, 1),
PARTITION sales_feb2022 FOR VALUES FROM (2022, 2, 1) TO (2022, 3, 1)); PARTITION sales_feb2022 FOR VALUES FROM (2022, 2, 1) TO (2022, 3, 1));
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager1', 2022, 1, 10);
INSERT INTO sales_date(salesman_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10); INSERT INTO sales_date(salesperson_name, sales_year, sales_month, sales_day) VALUES ('Manager2', 2022, 2, 10);
SELECT * FROM sales_date; SELECT * FROM sales_date;
SELECT * FROM sales_dec2022; SELECT * FROM sales_dec2022;
@ -234,7 +234,7 @@ DROP TABLE sales_date CASCADE;
-- --
-- Test: split DEFAULT partition; use an index on partition key; check index after split -- Test: split DEFAULT partition; use an index on partition key; check index after split
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
CREATE INDEX sales_range_sales_date_idx ON sales_range USING btree (sales_date); CREATE INDEX sales_range_sales_date_idx ON sales_range USING btree (sales_date);
@ -285,7 +285,7 @@ DROP TABLE sales_range CASCADE;
-- --
-- Test: some cases for splitting DEFAULT partition (different bounds) -- Test: some cases for splitting DEFAULT partition (different bounds)
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
-- sales_error intersects with sales_dec2022 (lower bound) -- sales_error intersects with sales_dec2022 (lower bound)
@ -335,7 +335,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_others INTO
DROP TABLE sales_range; DROP TABLE sales_range;
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
-- no error: bounds of sales_noerror are equal to lower and upper bounds of sales_dec2022 and sales_feb2022 -- no error: bounds of sales_noerror are equal to lower and upper bounds of sales_dec2022 and sales_feb2022
@ -350,11 +350,11 @@ DROP TABLE sales_range;
-- --
-- Test: split partition with CHECK and FOREIGN KEY CONSTRAINTs on partitioned table -- Test: split partition with CHECK and FOREIGN KEY CONSTRAINTs on partitioned table
-- --
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30));
INSERT INTO salesmans VALUES (1, 'Poirot'); INSERT INTO salespeople VALUES (1, 'Poirot');
CREATE TABLE sales_range ( CREATE TABLE sales_range (
salesman_id INT REFERENCES salesmans(salesman_id), salesperson_id INT REFERENCES salespeople(salesperson_id),
sales_amount INT CHECK (sales_amount > 1), sales_amount INT CHECK (sales_amount > 1),
sales_date DATE) PARTITION BY RANGE (sales_date); sales_date DATE) PARTITION BY RANGE (sales_date);
@ -376,28 +376,28 @@ SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conre
-- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_sales_amount_check" -- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_sales_amount_check"
INSERT INTO sales_range VALUES (1, 0, '2022-03-11'); INSERT INTO sales_range VALUES (1, 0, '2022-03-11');
-- ERROR: insert or update on table "sales_mar2022" violates foreign key constraint "sales_range_salesman_id_fkey" -- ERROR: insert or update on table "sales_mar2022" violates foreign key constraint "sales_range_salesperson_id_fkey"
INSERT INTO sales_range VALUES (-1, 10, '2022-03-11'); INSERT INTO sales_range VALUES (-1, 10, '2022-03-11');
-- ok -- ok
INSERT INTO sales_range VALUES (1, 10, '2022-03-11'); INSERT INTO sales_range VALUES (1, 10, '2022-03-11');
DROP TABLE sales_range CASCADE; DROP TABLE sales_range CASCADE;
DROP TABLE salesmans CASCADE; DROP TABLE salespeople CASCADE;
-- --
-- Test: split partition on partitioned table in case of existing FOREIGN KEY reference from another table -- Test: split partition on partitioned table in case of existing FOREIGN KEY reference from another table
-- --
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_id);
CREATE TABLE sales (salesman_id INT REFERENCES salesmans(salesman_id), sales_amount INT, sales_date DATE); CREATE TABLE sales (salesperson_id INT REFERENCES salespeople(salesperson_id), sales_amount INT, sales_date DATE);
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_40 PARTITION OF salesmans FOR VALUES FROM (10) TO (40); CREATE TABLE salespeople10_40 PARTITION OF salespeople FOR VALUES FROM (10) 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 (19, 'Ivanov'); INSERT INTO salespeople VALUES (19, 'Ivanov');
INSERT INTO salesmans VALUES (20, 'Smirnoff'); INSERT INTO salespeople VALUES (20, 'Smirnoff');
INSERT INTO salesmans VALUES (30, 'Ford'); INSERT INTO salespeople VALUES (30, 'Ford');
INSERT INTO sales VALUES (1, 100, '2022-03-01'); INSERT INTO sales VALUES (1, 100, '2022-03-01');
INSERT INTO sales VALUES (1, 110, '2022-03-02'); INSERT INTO sales VALUES (1, 110, '2022-03-02');
@ -408,36 +408,36 @@ INSERT INTO sales VALUES (20, 50, '2022-03-12');
INSERT INTO sales VALUES (20, 170, '2022-03-02'); INSERT INTO sales VALUES (20, 170, '2022-03-02');
INSERT INTO sales VALUES (30, 30, '2022-03-04'); INSERT INTO sales VALUES (30, 30, '2022-03-04');
SELECT * FROM salesmans01_10; SELECT * FROM salespeople01_10;
SELECT * FROM salesmans10_40; SELECT * FROM salespeople10_40;
ALTER TABLE salesmans SPLIT PARTITION salesmans10_40 INTO ALTER TABLE salespeople SPLIT PARTITION salespeople10_40 INTO
(PARTITION salesmans10_20 FOR VALUES FROM (10) TO (20), (PARTITION salespeople10_20 FOR VALUES FROM (10) TO (20),
PARTITION salesmans20_30 FOR VALUES FROM (20) TO (30), PARTITION salespeople20_30 FOR VALUES FROM (20) TO (30),
PARTITION salesmans30_40 FOR VALUES FROM (30) TO (40)); PARTITION salespeople30_40 FOR VALUES FROM (30) TO (40));
SELECT * FROM salesmans01_10; SELECT * FROM salespeople01_10;
SELECT * FROM salesmans10_20; SELECT * FROM salespeople10_20;
SELECT * FROM salesmans20_30; SELECT * FROM salespeople20_30;
SELECT * FROM salesmans30_40; SELECT * FROM salespeople30_40;
-- ERROR: insert or update on table "sales" violates foreign key constraint "sales_salesman_id_fkey" -- ERROR: insert or update on table "sales" violates foreign key constraint "sales_salesperson_id_fkey"
INSERT INTO sales VALUES (40, 50, '2022-03-04'); INSERT INTO sales VALUES (40, 50, '2022-03-04');
-- ok -- ok
INSERT INTO sales VALUES (30, 50, '2022-03-04'); INSERT INTO sales VALUES (30, 50, '2022-03-04');
DROP TABLE sales CASCADE; DROP TABLE sales CASCADE;
DROP TABLE salesmans CASCADE; DROP TABLE salespeople CASCADE;
-- --
-- Test: split partition of partitioned table with triggers -- Test: split partition of partitioned table with triggers
-- --
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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_40 PARTITION OF salesmans FOR VALUES FROM (10) TO (40); CREATE TABLE salespeople10_40 PARTITION OF salespeople FOR VALUES FROM (10) 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
@ -446,125 +446,125 @@ BEGIN
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');
-- 1 trigger should fire here (row): -- 1 trigger should fire here (row):
INSERT INTO salesmans10_40 VALUES (19, 'Ivanov'); INSERT INTO salespeople10_40 VALUES (19, 'Ivanov');
ALTER TABLE salesmans SPLIT PARTITION salesmans10_40 INTO ALTER TABLE salespeople SPLIT PARTITION salespeople10_40 INTO
(PARTITION salesmans10_20 FOR VALUES FROM (10) TO (20), (PARTITION salespeople10_20 FOR VALUES FROM (10) TO (20),
PARTITION salesmans20_30 FOR VALUES FROM (20) TO (30), PARTITION salespeople20_30 FOR VALUES FROM (20) TO (30),
PARTITION salesmans30_40 FOR VALUES FROM (30) TO (40)); PARTITION salespeople30_40 FOR VALUES FROM (30) TO (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');
-- 1 trigger should fire here (row): -- 1 trigger should fire here (row):
INSERT INTO salesmans30_40 VALUES (30, 'Ford'); INSERT INTO salespeople30_40 VALUES (30, 'Ford');
SELECT * FROM salesmans01_10; SELECT * FROM salespeople01_10;
SELECT * FROM salesmans10_20; SELECT * FROM salespeople10_20;
SELECT * FROM salesmans20_30; SELECT * FROM salespeople20_30;
SELECT * FROM salesmans30_40; SELECT * FROM salespeople30_40;
DROP TABLE salesmans CASCADE; DROP TABLE salespeople CASCADE;
DROP FUNCTION after_insert_row_trigger(); DROP FUNCTION after_insert_row_trigger();
-- --
-- Test: split partition witch identity column -- Test: split partition witch identity column
-- If split partition column is identity column, columns of new partitions are identity columns too. -- If split partition column is identity column, columns of new partitions are identity columns too.
-- --
CREATE TABLE salesmans(salesman_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesman_id); CREATE TABLE salespeople(salesperson_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_id);
CREATE TABLE salesmans1_2 PARTITION OF salesmans FOR VALUES FROM (1) TO (2); CREATE TABLE salespeople1_2 PARTITION OF salespeople FOR VALUES FROM (1) TO (2);
-- Create new partition with identity column: -- Create new partition with identity column:
CREATE TABLE salesmans2_5(salesman_id INT NOT NULL, salesman_name VARCHAR(30)); CREATE TABLE salespeople2_5(salesperson_id INT NOT NULL, salesperson_name VARCHAR(30));
ALTER TABLE salesmans ATTACH PARTITION salesmans2_5 FOR VALUES FROM (2) TO (5); ALTER TABLE salespeople ATTACH PARTITION salespeople2_5 FOR VALUES FROM (2) TO (5);
INSERT INTO salesmans (salesman_name) VALUES ('Poirot'); INSERT INTO salespeople (salesperson_name) VALUES ('Poirot');
INSERT INTO salesmans (salesman_name) VALUES ('Ivanov'); INSERT INTO salespeople (salesperson_name) VALUES ('Ivanov');
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople'::regclass::oid;
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans1_2'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople1_2'::regclass::oid;
-- Split partition has identity column: -- Split partition has identity column:
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans2_5'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople2_5'::regclass::oid;
ALTER TABLE salesmans SPLIT PARTITION salesmans2_5 INTO ALTER TABLE salespeople SPLIT PARTITION salespeople2_5 INTO
(PARTITION salesmans2_3 FOR VALUES FROM (2) TO (3), (PARTITION salespeople2_3 FOR VALUES FROM (2) TO (3),
PARTITION salesmans3_4 FOR VALUES FROM (3) TO (4), PARTITION salespeople3_4 FOR VALUES FROM (3) TO (4),
PARTITION salesmans4_5 FOR VALUES FROM (4) TO (5)); PARTITION salespeople4_5 FOR VALUES FROM (4) TO (5));
INSERT INTO salesmans (salesman_name) VALUES ('May'); INSERT INTO salespeople (salesperson_name) VALUES ('May');
INSERT INTO salesmans (salesman_name) VALUES ('Ford'); INSERT INTO salespeople (salesperson_name) VALUES ('Ford');
SELECT * FROM salesmans1_2; SELECT * FROM salespeople1_2;
SELECT * FROM salesmans2_3; SELECT * FROM salespeople2_3;
SELECT * FROM salesmans3_4; SELECT * FROM salespeople3_4;
SELECT * FROM salesmans4_5; SELECT * FROM salespeople4_5;
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople'::regclass::oid;
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans1_2'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople1_2'::regclass::oid;
-- New partitions have identity-columns: -- New partitions have identity-columns:
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans2_3'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople2_3'::regclass::oid;
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans3_4'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople3_4'::regclass::oid;
SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salesmans4_5'::regclass::oid; SELECT attname, attidentity, attgenerated FROM pg_attribute WHERE attnum > 0 AND attrelid = 'salespeople4_5'::regclass::oid;
DROP TABLE salesmans CASCADE; DROP TABLE salespeople CASCADE;
-- --
-- Test: split partition with deleted columns -- Test: split partition with deleted columns
-- --
CREATE TABLE salesmans(salesman_id INT PRIMARY KEY, salesman_name VARCHAR(30)) PARTITION BY RANGE (salesman_id); CREATE TABLE salespeople(salesperson_id INT PRIMARY KEY, salesperson_name VARCHAR(30)) PARTITION BY RANGE (salesperson_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 new partition with some deleted columns: -- Create new partition with some deleted columns:
CREATE TABLE salesmans10_40(d1 VARCHAR(30), salesman_id INT PRIMARY KEY, d2 INT, d3 DATE, salesman_name VARCHAR(30)); CREATE TABLE salespeople10_40(d1 VARCHAR(30), salesperson_id INT PRIMARY KEY, d2 INT, d3 DATE, salesperson_name VARCHAR(30));
INSERT INTO salesmans10_40 VALUES ('dummy value 1', 19, 100, now(), 'Ivanov'); INSERT INTO salespeople10_40 VALUES ('dummy value 1', 19, 100, now(), 'Ivanov');
INSERT INTO salesmans10_40 VALUES ('dummy value 2', 20, 101, now(), 'Smirnoff'); INSERT INTO salespeople10_40 VALUES ('dummy value 2', 20, 101, now(), 'Smirnoff');
ALTER TABLE salesmans10_40 DROP COLUMN d1; ALTER TABLE salespeople10_40 DROP COLUMN d1;
ALTER TABLE salesmans10_40 DROP COLUMN d2; ALTER TABLE salespeople10_40 DROP COLUMN d2;
ALTER TABLE salesmans10_40 DROP COLUMN d3; ALTER TABLE salespeople10_40 DROP COLUMN d3;
ALTER TABLE salesmans ATTACH PARTITION salesmans10_40 FOR VALUES FROM (10) TO (40); ALTER TABLE salespeople ATTACH PARTITION salespeople10_40 FOR VALUES FROM (10) 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 SPLIT PARTITION salesmans10_40 INTO ALTER TABLE salespeople SPLIT PARTITION salespeople10_40 INTO
(PARTITION salesmans10_20 FOR VALUES FROM (10) TO (20), (PARTITION salespeople10_20 FOR VALUES FROM (10) TO (20),
PARTITION salesmans20_30 FOR VALUES FROM (20) TO (30), PARTITION salespeople20_30 FOR VALUES FROM (20) TO (30),
PARTITION salesmans30_40 FOR VALUES FROM (30) TO (40)); PARTITION salespeople30_40 FOR VALUES FROM (30) TO (40));
select * from salesmans01_10; select * from salespeople01_10;
select * from salesmans10_20; select * from salespeople10_20;
select * from salesmans20_30; select * from salespeople20_30;
select * from salesmans30_40; select * from salespeople30_40;
DROP TABLE salesmans CASCADE; DROP TABLE salespeople CASCADE;
-- --
-- Test: split sub-partition -- Test: split sub-partition
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_apr2022 (salesperson_id INT, salesperson_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_apr_all PARTITION OF sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-05-01'); CREATE TABLE sales_apr_all PARTITION OF 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'); ALTER TABLE sales_range ATTACH PARTITION sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-05-01');
@ -611,8 +611,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
(salesman_id INT, (salesperson_id INT,
salesman_name VARCHAR(30), salesperson_name VARCHAR(30),
sales_state VARCHAR(20), sales_state VARCHAR(20),
sales_amount INT, sales_amount INT,
sales_date DATE) sales_date DATE)
@ -648,8 +648,8 @@ DROP TABLE sales_list;
-- * new partitions do not have a value that split partition has. -- * new partitions do not have a value that split partition has.
-- --
CREATE TABLE sales_list CREATE TABLE sales_list
(salesman_id INT, (salesperson_id INT,
salesman_name VARCHAR(30), salesperson_name VARCHAR(30),
sales_state VARCHAR(20), sales_state VARCHAR(20),
sales_amount INT, sales_amount INT,
sales_date DATE) sales_date DATE)
@ -676,34 +676,34 @@ DROP TABLE sales_list;
-- Test: BY LIST partitioning, SPLIT PARTITION with data -- Test: BY LIST partitioning, SPLIT PARTITION with data
-- --
CREATE TABLE sales_list CREATE TABLE sales_list
(salesman_id SERIAL, (salesperson_id SERIAL,
salesman_name VARCHAR(30), salesperson_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 (salesman_name); CREATE INDEX sales_list_salesperson_name_idx ON sales_list USING btree (salesperson_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 ('Helsinki', 'St. Petersburg', 'Oslo'); CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Helsinki', 'St. Petersburg', 'Oslo');
CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok'); CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok');
CREATE TABLE sales_others PARTITION OF sales_list DEFAULT; CREATE TABLE sales_others PARTITION OF sales_list DEFAULT;
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Trump', 'Bejing', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smirnoff', 'New York', 500, '2022-03-03');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ford', 'St. Petersburg', 2000, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Ivanov', 'Warsaw', 750, '2022-03-04');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Deev', 'Lisbon', 250, '2022-03-07');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Poirot', 'Berlin', 1000, '2022-03-01');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Oslo', 1200, '2022-03-06'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Oslo', 1200, '2022-03-06');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Li', 'Vladivostok', 1150, '2022-03-09');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Oslo', 1200, '2022-03-11'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('May', 'Oslo', 1200, '2022-03-11');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Helsinki', 800, '2022-03-02'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Halder', 'Helsinki', 800, '2022-03-02');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Muller', 'Madrid', 650, '2022-03-05');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Smith', 'Kyiv', 350, '2022-03-10');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Gandi', 'Warsaw', 150, '2022-03-08');
INSERT INTO sales_list (salesman_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05'); INSERT INTO sales_list (salesperson_name, sales_state, sales_amount, sales_date) VALUES ('Plato', 'Lisbon', 950, '2022-03-05');
ALTER TABLE sales_list SPLIT PARTITION sales_all INTO ALTER TABLE sales_list SPLIT PARTITION sales_all INTO
(PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'),
@ -722,7 +722,7 @@ SET enable_seqscan = OFF;
SELECT * FROM sales_central WHERE sales_state = 'Warsaw'; SELECT * FROM sales_central WHERE sales_state = 'Warsaw';
SELECT * FROM sales_list WHERE sales_state = 'Warsaw'; SELECT * FROM sales_list WHERE sales_state = 'Warsaw';
SELECT * FROM sales_list WHERE salesman_name = 'Ivanov'; SELECT * FROM sales_list WHERE salesperson_name = 'Ivanov';
SET enable_indexscan = ON; SET enable_indexscan = ON;
SET enable_seqscan = ON; SET enable_seqscan = ON;
@ -734,7 +734,7 @@ DROP TABLE sales_list;
-- * split DEFAULT partition to partitions with spaces between bounds; -- * split DEFAULT partition to partitions with spaces between bounds;
-- * random order of partitions in SPLIT PARTITION command. -- * random order of partitions in SPLIT PARTITION command.
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
INSERT INTO sales_range VALUES (1, 'May', 1000, '2022-01-31'); INSERT INTO sales_range VALUES (1, 'May', 1000, '2022-01-31');
@ -772,7 +772,7 @@ DROP TABLE sales_range;
-- * split non-DEFAULT partition to partitions with spaces between bounds; -- * split non-DEFAULT partition to partitions with spaces between bounds;
-- * random order of partitions in SPLIT PARTITION command. -- * random order of partitions in SPLIT PARTITION command.
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date);
CREATE TABLE sales_all PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-05-01'); CREATE TABLE sales_all PARTITION OF sales_range FOR VALUES FROM ('2022-01-01') TO ('2022-05-01');
CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; CREATE TABLE sales_others PARTITION OF sales_range DEFAULT;
@ -809,7 +809,7 @@ DROP TABLE sales_range;
-- Test for split non-DEFAULT partition to DEFAULT partition + partitions -- Test for split non-DEFAULT partition to DEFAULT partition + partitions
-- with spaces between bounds. -- with spaces between bounds.
-- --
CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date DATE) PARTITION BY RANGE (sales_date); CREATE TABLE sales_range (salesperson_id INT, salesperson_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_all PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01'); CREATE TABLE sales_all PARTITION OF sales_range FOR VALUES FROM ('2022-02-01') TO ('2022-05-01');