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
|
\endif
|
||||||
-- PG17-specific tests go here.
|
-- 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)
|
(1 row)
|
||||||
|
|
||||||
DROP TABLE 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;
|
|
||||||
ERROR: specifying a table access method is not supported on a partitioned table
|
|
||||||
\set VERBOSITY terse
|
\set VERBOSITY terse
|
||||||
ALTER EXTENSION citus DROP ACCESS METHOD fake_am;
|
ALTER EXTENSION citus DROP ACCESS METHOD fake_am;
|
||||||
NOTICE: Citus does not propagate adding/dropping member objects
|
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.
|
-- 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;
|
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
|
\set VERBOSITY terse
|
||||||
ALTER EXTENSION citus DROP ACCESS METHOD fake_am;
|
ALTER EXTENSION citus DROP ACCESS METHOD fake_am;
|
||||||
drop schema test_tableam cascade;
|
drop schema test_tableam cascade;
|
||||||
|
|
Loading…
Reference in New Issue