drop table if exists book_test; drop rule if exists book_inherit_test_before_1950_rule_insert on book_inherit_test; drop table if exists book_inherit_test_before_1950; drop table if exists book_inherit_test; CREATE TABLE book_test ( id uuid NOT NULL, "name" varchar NOT NULL, releaseyear int4 NOT null, CONSTRAINT book_test_pk PRIMARY KEY (id) ); CREATE INDEX book_test_name_idx ON book_test USING btree (name); do $$ DECLARE maxLenght int := 2000000; begin FOR i IN 1..maxLenght LOOP INSERT INTO book_test (id, "name", releaseyear) values (gen_random_uuid(), 'name'||i, random()*(2030-1900)+1900); END LOOP; END;$$ CREATE TABLE book_inherit_test( id uuid NOT NULL, "name" varchar NOT NULL, releaseyear int4 NOT NULL ); create table book_inherit_test_before_1950 (check (releaseyear >= 1900 and releaseyear < 1951)) inherits (book_inherit_test); create rule book_inherit_test_before_1950_rule_insert as on insert to book_inherit_test where releaseyear >= 1900 and releaseyear < 1951 do instead insert into book_inherit_test_before_1950 values (new.*); truncate table book_inherit_test; insert into book_inherit_test select * from book_test limit 1000000; select count(*) from book_inherit_test;