Remove partitions from the schema cache
breaking: Embedding, OpenApi and other features related to the schema cache are no longer allowed on partitions.
This commit is contained in:
Vendored
+23
-12
@@ -670,26 +670,37 @@ INSERT INTO private.personnages (film_id, role_id, character) VALUES (12,1,'méc
|
||||
|
||||
DO $do$BEGIN
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 100000) THEN
|
||||
INSERT INTO test.partitioned_a(id, name) VALUES (1,'first');
|
||||
INSERT INTO test.partitioned_a(id, name) VALUES (2,'first');
|
||||
INSERT INTO test.partitioned_a(id, name) VALUES (3,'second');
|
||||
INSERT INTO test.partitioned_a(id, name) VALUES (4,'second');
|
||||
INSERT INTO test.car_models(name, year) VALUES ('DeLorean',1981);
|
||||
INSERT INTO test.car_models(name, year) VALUES ('F310-B',1997);
|
||||
INSERT INTO test.car_models(name, year) VALUES ('Veneno',2013);
|
||||
INSERT INTO test.car_models(name, year) VALUES ('Murcielago',2001);
|
||||
END IF;
|
||||
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 110000) THEN
|
||||
INSERT INTO test.reference_from_partitioned(id) VALUES (1),(2);
|
||||
INSERT INTO test.car_brands(name) VALUES ('DMC');
|
||||
INSERT INTO test.car_brands(name) VALUES ('Ferrari');
|
||||
INSERT INTO test.car_brands(name) VALUES ('Lamborghini');
|
||||
|
||||
UPDATE test.partitioned_a SET id_ref = 1 WHERE id = 1;
|
||||
UPDATE test.car_models SET car_brand_name = 'DMC' WHERE name = 'DeLorean';
|
||||
UPDATE test.car_models SET car_brand_name = 'Ferrari' WHERE name = 'F310-B';
|
||||
UPDATE test.car_models SET car_brand_name = 'Lamborghini' WHERE name = 'Veneno';
|
||||
UPDATE test.car_models SET car_brand_name = 'Lamborghini' WHERE name = 'Murcielago';
|
||||
END IF;
|
||||
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 120000) THEN
|
||||
INSERT INTO test.partitioned_b(id, name) VALUES (1,'first_b');
|
||||
INSERT INTO test.partitioned_b(id, name, id_a, name_a) VALUES (2,'first_b', 2, 'first');
|
||||
INSERT INTO test.partitioned_b(id, name) VALUES (3,'second_b');
|
||||
INSERT INTO test.partitioned_b(id, name, id_a, name_a) VALUES (4,'second_b', 4, 'second');
|
||||
INSERT INTO test.car_model_sales(date, quantity, car_model_name, car_model_year) VALUES ('2021-01-14',7,'DeLorean',1981);
|
||||
INSERT INTO test.car_model_sales(date, quantity, car_model_name, car_model_year) VALUES ('2021-01-15',9,'DeLorean',1981);
|
||||
INSERT INTO test.car_model_sales(date, quantity, car_model_name, car_model_year) VALUES ('2021-02-11',1,'Murcielago',2001);
|
||||
INSERT INTO test.car_model_sales(date, quantity, car_model_name, car_model_year) VALUES ('2021-02-12',3,'Murcielago',2001);
|
||||
|
||||
INSERT INTO test.reference_to_partitioned(id) VALUES (1);
|
||||
INSERT INTO test.reference_to_partitioned(id, id_a, name_a) VALUES (2, 2, 'first');
|
||||
INSERT INTO test.car_racers(name) VALUES ('Alain Prost');
|
||||
INSERT INTO test.car_racers(name, car_model_name, car_model_year) VALUES ('Michael Schumacher', 'F310-B', 1997);
|
||||
|
||||
INSERT INTO test.car_dealers(name,city) VALUES ('Springfield Cars S.A.','Springfield');
|
||||
INSERT INTO test.car_dealers(name,city) VALUES ('The Best Deals S.A.','Franklin');
|
||||
|
||||
INSERT INTO test.car_models_car_dealers(car_model_name, car_model_year, car_dealer_name, car_dealer_city, quantity) VALUES ('DeLorean',1981,'Springfield Cars S.A.','Springfield',15);
|
||||
INSERT INTO test.car_models_car_dealers(car_model_name, car_model_year, car_dealer_name, car_dealer_city, quantity) VALUES ('Murcielago',2001,'The Best Deals S.A.','Franklin',2);
|
||||
END IF;
|
||||
END$do$;
|
||||
|
||||
|
||||
Vendored
+14
-8
@@ -192,19 +192,25 @@ GRANT USAGE ON SCHEMA test TO postgrest_test_default_role;
|
||||
|
||||
DO $do$BEGIN
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 100000) THEN
|
||||
GRANT ALL ON TABLE test.partitioned_a TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.first_partition_a TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.second_partition_a TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models_2021 TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models_default TO postgrest_test_anonymous;
|
||||
END IF;
|
||||
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 110000) THEN
|
||||
GRANT ALL ON TABLE test.reference_from_partitioned TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_brands TO postgrest_test_anonymous;
|
||||
END IF;
|
||||
|
||||
IF (SELECT current_setting('server_version_num')::INT >= 120000) THEN
|
||||
GRANT ALL ON TABLE test.partitioned_b TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.first_partition_b TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.second_partition_b TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.reference_to_partitioned TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_model_sales TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_model_sales_202101 TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_model_sales_default TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_racers TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_dealers TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_dealers_springfield TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_dealers_default TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models_car_dealers TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models_car_dealers_10to20 TO postgrest_test_anonymous;
|
||||
GRANT ALL ON TABLE test.car_models_car_dealers_default TO postgrest_test_anonymous;
|
||||
END IF;
|
||||
END$do$;
|
||||
Vendored
+58
-31
@@ -2245,56 +2245,83 @@ create table private.rollen (
|
||||
do $do$begin
|
||||
-- partitioned tables using the PARTITION syntax are supported from pg v10
|
||||
if (select current_setting('server_version_num')::int >= 100000) then
|
||||
create table test.partitioned_a(
|
||||
id int not null,
|
||||
name varchar(64) not null
|
||||
) partition by list (name);
|
||||
create table test.car_models(
|
||||
name varchar(64) not null,
|
||||
year int not null
|
||||
) partition by list (year);
|
||||
|
||||
comment on table test.partitioned_a is
|
||||
comment on table test.car_models is
|
||||
$$A partitioned table
|
||||
|
||||
A test for partitioned tables$$;
|
||||
|
||||
create table test.first_partition_a partition of test.partitioned_a
|
||||
for values in ('first');
|
||||
|
||||
create table test.second_partition_a partition of test.partitioned_a
|
||||
for values in ('second');
|
||||
create table test.car_models_2021 partition of test.car_models
|
||||
for values in (2021);
|
||||
create table test.car_models_default partition of test.car_models
|
||||
for values in (1981,1997,2001,2013);
|
||||
end if;
|
||||
|
||||
-- primary keys for partitioned tables are supported from pg v11
|
||||
if (select current_setting('server_version_num')::int >= 110000) then
|
||||
create table test.reference_from_partitioned (
|
||||
id int primary key
|
||||
create table test.car_brands (
|
||||
name varchar(64) primary key
|
||||
);
|
||||
|
||||
alter table test.partitioned_a add primary key (id, name);
|
||||
alter table test.partitioned_a add column id_ref int references test.reference_from_partitioned(id);
|
||||
alter table test.car_models add primary key (name, year);
|
||||
alter table test.car_models add column car_brand_name varchar(64) references test.car_brands(name);
|
||||
end if;
|
||||
|
||||
-- foreign keys referencing partitioned tables are supported from pg v12
|
||||
if (select current_setting('server_version_num')::int >= 120000) then
|
||||
create table test.partitioned_b(
|
||||
id int not null,
|
||||
name varchar(64) not null,
|
||||
id_a int,
|
||||
name_a varchar(64),
|
||||
primary key (id, name),
|
||||
foreign key (id_a, name_a) references test.partitioned_a (id, name)
|
||||
) partition by list (name);
|
||||
create table test.car_model_sales(
|
||||
date varchar(64) not null,
|
||||
quantity int not null,
|
||||
car_model_name varchar(64),
|
||||
car_model_year int,
|
||||
primary key (date, car_model_name, car_model_year),
|
||||
foreign key (car_model_name, car_model_year) references test.car_models (name, year)
|
||||
) partition by range (date);
|
||||
|
||||
create table test.first_partition_b partition of test.partitioned_b
|
||||
for values in ('first_b');
|
||||
create table test.car_model_sales_202101 partition of test.car_model_sales
|
||||
for values from ('2021-01-01') to ('2021-01-31');
|
||||
|
||||
create table test.second_partition_b partition of test.partitioned_b
|
||||
for values in ('second_b');
|
||||
create table test.car_model_sales_default partition of test.car_model_sales
|
||||
default;
|
||||
|
||||
create table test.reference_to_partitioned (
|
||||
id int not null primary key,
|
||||
id_a int,
|
||||
name_a varchar(64),
|
||||
foreign key (id_a, name_a) references test.partitioned_a (id, name)
|
||||
create table test.car_racers (
|
||||
name varchar(64) not null primary key,
|
||||
car_model_name varchar(64),
|
||||
car_model_year int,
|
||||
foreign key (car_model_name, car_model_year) references test.car_models (name, year)
|
||||
);
|
||||
|
||||
create table test.car_dealers (
|
||||
name varchar(64) not null,
|
||||
city varchar(64) not null,
|
||||
primary key (name, city)
|
||||
) partition by list (city);
|
||||
|
||||
create table test.car_dealers_springfield partition of test.car_dealers
|
||||
for values in ('Springfield');
|
||||
|
||||
create table test.car_dealers_default partition of test.car_dealers
|
||||
default;
|
||||
|
||||
create table test.car_models_car_dealers (
|
||||
car_model_name varchar(64) not null,
|
||||
car_model_year int not null,
|
||||
car_dealer_name varchar(64) not null,
|
||||
car_dealer_city varchar(64) not null,
|
||||
quantity int not null,
|
||||
foreign key (car_model_name, car_model_year) references test.car_models (name, year),
|
||||
foreign key (car_dealer_name, car_dealer_city) references test.car_dealers (name, city)
|
||||
) partition by range (quantity);
|
||||
|
||||
create table test.car_models_car_dealers_10to20 partition of test.car_models_car_dealers
|
||||
for values from (10) to (20);
|
||||
|
||||
create table test.car_models_car_dealers_default partition of test.car_models_car_dealers
|
||||
default;
|
||||
end if;
|
||||
end$do$;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user