mirror of https://github.com/citusdata/citus.git
PG17 compatibility: fix diff in tableam (#7771)
Test `tableam` expects that this CREATE TABLE statement: `CREATE TABLE test_partitioned(id int, p int, val int) PARTITION BY RANGE (p) USING fake_am;` will produce this error: `specifying a table access method is not supported on a partitioned table` but as of [this PG commit](https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=374c7a229) it is possible to specify an access method on a partitioned table. This fix moves the CREATE TABLE statement to pg17, and adds an additional test to show parent access method is inherited.pull/7922/head
parent
9615b52863
commit
0de7b5a240
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue