diff --git a/src/test/regress/expected/pg17.out b/src/test/regress/expected/pg17.out index 8943e78e7..563808787 100644 --- a/src/test/regress/expected/pg17.out +++ b/src/test/regress/expected/pg17.out @@ -352,3 +352,74 @@ drop cascades to table pg17_corr_subq_folding.events \endif -- PG17-specific tests go here. -- +CREATE SCHEMA pg17; +SET search_path TO pg17; +-- Test specifying access method on partitioned tables. PG17 feature, added by: +-- https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=374c7a229 +-- The following tests were failing tests in tableam but will pass on PG >= 17. +-- There is some set-up duplication of tableam, and this test can be returned +-- to tableam when 17 is the minimum supported PG version. +SELECT public.run_command_on_coordinator_and_workers($Q$ + SET citus.enable_ddl_propagation TO off; + CREATE FUNCTION fake_am_handler(internal) + RETURNS table_am_handler + AS 'citus' + LANGUAGE C; + CREATE ACCESS METHOD fake_am TYPE TABLE HANDLER fake_am_handler; +$Q$); + run_command_on_coordinator_and_workers +--------------------------------------------------------------------- + +(1 row) + +-- Since Citus assumes access methods are part of the extension, make fake_am +-- owned manually to be able to pass checks on Citus while distributing tables. +ALTER EXTENSION citus ADD ACCESS METHOD fake_am; +CREATE TABLE test_partitioned(id int, p int, val int) +PARTITION BY RANGE (p) USING fake_am; +-- Test that children inherit access method from parent +CREATE TABLE test_partitioned_p1 PARTITION OF test_partitioned + FOR VALUES FROM (1) TO (10); +CREATE TABLE test_partitioned_p2 PARTITION OF test_partitioned + FOR VALUES FROM (11) TO (20); +INSERT INTO test_partitioned VALUES (1, 5, -1), (2, 15, -2); +WARNING: fake_tuple_insert +WARNING: fake_tuple_insert +INSERT INTO test_partitioned VALUES (3, 6, -6), (4, 16, -4); +WARNING: fake_tuple_insert +WARNING: fake_tuple_insert +SELECT count(1) FROM test_partitioned_p1; +WARNING: fake_scan_getnextslot +WARNING: fake_scan_getnextslot +WARNING: fake_scan_getnextslot + count +--------------------------------------------------------------------- + 2 +(1 row) + +SELECT count(1) FROM test_partitioned_p2; +WARNING: fake_scan_getnextslot +WARNING: fake_scan_getnextslot +WARNING: fake_scan_getnextslot + count +--------------------------------------------------------------------- + 2 +(1 row) + +-- Both child table partitions inherit fake_am +SELECT c.relname, am.amname FROM pg_class c, pg_am am +WHERE c.relam = am.oid AND c.oid IN ('test_partitioned_p1'::regclass, 'test_partitioned_p2'::regclass) +ORDER BY c.relname; + relname | amname +--------------------------------------------------------------------- + test_partitioned_p1 | fake_am + test_partitioned_p2 | fake_am +(2 rows) + +DROP TABLE test_partitioned; +ALTER EXTENSION citus DROP ACCESS METHOD fake_am; +-- End of testing specifying access method on partitioned tables. +DROP SCHEMA pg17 CASCADE; +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to function fake_am_handler(internal) +drop cascades to access method fake_am diff --git a/src/test/regress/expected/tableam.out b/src/test/regress/expected/tableam.out index 8e6fe5205..a24fed14f 100644 --- a/src/test/regress/expected/tableam.out +++ b/src/test/regress/expected/tableam.out @@ -281,12 +281,6 @@ DETAIL: from localhost:xxxxx (1 row) DROP TABLE test_partitioned; --- Specifying access method in parent is not supported. --- If the below statement ever succeeds, add more tests for --- the case where children inherit access method from parent. -CREATE TABLE test_partitioned(id int, p int, val int) -PARTITION BY RANGE (p) USING fake_am; -ERROR: specifying a table access method is not supported on a partitioned table \set VERBOSITY terse ALTER EXTENSION citus DROP ACCESS METHOD fake_am; NOTICE: Citus does not propagate adding/dropping member objects diff --git a/src/test/regress/sql/pg17.sql b/src/test/regress/sql/pg17.sql index 4fdde71ca..e297a0c58 100644 --- a/src/test/regress/sql/pg17.sql +++ b/src/test/regress/sql/pg17.sql @@ -180,3 +180,51 @@ DROP SCHEMA pg17_corr_subq_folding CASCADE; -- PG17-specific tests go here. -- +CREATE SCHEMA pg17; +SET search_path TO pg17; + +-- Test specifying access method on partitioned tables. PG17 feature, added by: +-- https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=374c7a229 +-- The following tests were failing tests in tableam but will pass on PG >= 17. +-- There is some set-up duplication of tableam, and this test can be returned +-- to tableam when 17 is the minimum supported PG version. + +SELECT public.run_command_on_coordinator_and_workers($Q$ + SET citus.enable_ddl_propagation TO off; + CREATE FUNCTION fake_am_handler(internal) + RETURNS table_am_handler + AS 'citus' + LANGUAGE C; + CREATE ACCESS METHOD fake_am TYPE TABLE HANDLER fake_am_handler; +$Q$); + +-- Since Citus assumes access methods are part of the extension, make fake_am +-- owned manually to be able to pass checks on Citus while distributing tables. +ALTER EXTENSION citus ADD ACCESS METHOD fake_am; + +CREATE TABLE test_partitioned(id int, p int, val int) +PARTITION BY RANGE (p) USING fake_am; + +-- Test that children inherit access method from parent +CREATE TABLE test_partitioned_p1 PARTITION OF test_partitioned + FOR VALUES FROM (1) TO (10); +CREATE TABLE test_partitioned_p2 PARTITION OF test_partitioned + FOR VALUES FROM (11) TO (20); + +INSERT INTO test_partitioned VALUES (1, 5, -1), (2, 15, -2); +INSERT INTO test_partitioned VALUES (3, 6, -6), (4, 16, -4); + +SELECT count(1) FROM test_partitioned_p1; +SELECT count(1) FROM test_partitioned_p2; + +-- Both child table partitions inherit fake_am +SELECT c.relname, am.amname FROM pg_class c, pg_am am +WHERE c.relam = am.oid AND c.oid IN ('test_partitioned_p1'::regclass, 'test_partitioned_p2'::regclass) +ORDER BY c.relname; + +DROP TABLE test_partitioned; +ALTER EXTENSION citus DROP ACCESS METHOD fake_am; + +-- End of testing specifying access method on partitioned tables. + +DROP SCHEMA pg17 CASCADE; diff --git a/src/test/regress/sql/tableam.sql b/src/test/regress/sql/tableam.sql index dd1976f70..d92b1d141 100644 --- a/src/test/regress/sql/tableam.sql +++ b/src/test/regress/sql/tableam.sql @@ -138,12 +138,6 @@ SELECT count(*) FROM test_partitioned; DROP TABLE test_partitioned; --- Specifying access method in parent is not supported. --- If the below statement ever succeeds, add more tests for --- the case where children inherit access method from parent. -CREATE TABLE test_partitioned(id int, p int, val int) -PARTITION BY RANGE (p) USING fake_am; - \set VERBOSITY terse ALTER EXTENSION citus DROP ACCESS METHOD fake_am; drop schema test_tableam cascade;