mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Add partitioned table support to sepgsql
The new partitioned table capability added a new relkind, namely RELKIND_PARTITIONED_TABLE. Update sepgsql to treat this new relkind exactly the same way it does RELKIND_RELATION. In addition, add regression test coverage for partitioned tables. Issue raised by Stephen Frost and initial patch by Mike Palmiotto. Review by Tom Lane and Robert Haas, and editorializing by me. Discussion: https://postgr.es/m/flat/623bcaae-112e-ced0-8c22-a84f75ae0c53%40joeconway.com
This commit is contained in:
@ -32,13 +32,21 @@ ALTER TABLE regtest_table ADD COLUMN z int;
|
||||
|
||||
CREATE TABLE regtest_table_2 (a int) WITH OIDS;
|
||||
|
||||
CREATE TABLE regtest_ptable (a int) PARTITION BY RANGE (a);
|
||||
CREATE TABLE regtest_ptable_ones PARTITION OF regtest_ptable FOR VALUES FROM ('0') TO ('10');
|
||||
CREATE TABLE regtest_ptable_tens PARTITION OF regtest_ptable FOR VALUES FROM ('10') TO ('100');
|
||||
|
||||
ALTER TABLE regtest_ptable ADD COLUMN q int;
|
||||
|
||||
-- corresponding toast table should not have label and permission checks
|
||||
ALTER TABLE regtest_table_2 ADD COLUMN b text;
|
||||
|
||||
-- VACUUM FULL internally create a new table and swap them later.
|
||||
VACUUM FULL regtest_table;
|
||||
VACUUM FULL regtest_ptable;
|
||||
|
||||
CREATE VIEW regtest_view AS SELECT * FROM regtest_table WHERE x < 100;
|
||||
CREATE VIEW regtest_pview AS SELECT * FROM regtest_ptable WHERE a < 99;
|
||||
|
||||
CREATE SEQUENCE regtest_seq;
|
||||
|
||||
@ -57,8 +65,12 @@ SET SESSION AUTHORIZATION regress_sepgsql_test_user;
|
||||
SET search_path = regtest_schema, public;
|
||||
|
||||
CREATE TABLE regtest_table_3 (x int, y serial);
|
||||
CREATE TABLE regtest_ptable_3 (o int, p serial) PARTITION BY RANGE (o);
|
||||
CREATE TABLE regtest_ptable_3_ones PARTITION OF regtest_ptable_3 FOR VALUES FROM ('0') to ('10');
|
||||
CREATE TABLE regtest_ptable_3_tens PARTITION OF regtest_ptable_3 FOR VALUES FROM ('10') to ('100');
|
||||
|
||||
CREATE VIEW regtest_view_2 AS SELECT * FROM regtest_table_3 WHERE x < y;
|
||||
CREATE VIEW regtest_pview_2 AS SELECT * FROM regtest_ptable_3 WHERE o < p;
|
||||
|
||||
CREATE FUNCTION regtest_func_2(int) RETURNS bool LANGUAGE plpgsql
|
||||
AS 'BEGIN RETURN $1 * $1 < 100; END';
|
||||
@ -77,6 +89,18 @@ ALTER TABLE regtest_table_4
|
||||
ADD CONSTRAINT regtest_tbl4_con EXCLUDE USING btree (z WITH =);
|
||||
DROP TABLE regtest_table_4 CASCADE;
|
||||
|
||||
-- For partitioned tables
|
||||
CREATE TABLE regtest_ptable_4 (x int, y int, z int) PARTITION BY RANGE (x);
|
||||
CREATE TABLE regtest_ptable_4_ones PARTITION OF regtest_ptable_4 FOR VALUES FROM ('0') TO ('10');
|
||||
|
||||
CREATE INDEX regtest_pindex_tbl4_y ON regtest_ptable_4_ones(y);
|
||||
CREATE INDEX regtest_pindex_tbl4_z ON regtest_ptable_4_ones(z);
|
||||
ALTER TABLE regtest_ptable_4 ALTER COLUMN y TYPE float;
|
||||
DROP INDEX regtest_pindex_tbl4_y;
|
||||
ALTER TABLE regtest_ptable_4_ones
|
||||
ADD CONSTRAINT regtest_ptbl4_con EXCLUDE USING btree (z WITH =);
|
||||
DROP TABLE regtest_ptable_4 CASCADE;
|
||||
|
||||
--
|
||||
-- DROP Permission checks (with clean-up)
|
||||
--
|
||||
@ -90,7 +114,10 @@ DROP VIEW regtest_view;
|
||||
ALTER TABLE regtest_table DROP COLUMN y;
|
||||
ALTER TABLE regtest_table_2 SET WITHOUT OIDS;
|
||||
|
||||
ALTER TABLE regtest_ptable DROP COLUMN q CASCADE;
|
||||
|
||||
DROP TABLE regtest_table;
|
||||
DROP TABLE regtest_ptable CASCADE;
|
||||
|
||||
DROP OWNED BY regress_sepgsql_test_user;
|
||||
|
||||
|
Reference in New Issue
Block a user