Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2e577c9

Browse files
committed
Remove assertion for ALTER TABLE .. DETACH PARTITION CONCURRENTLY
One code path related to this flavor of ALTER TABLE was checking that the relation to detach has to be a normal table or a partitioned table, which would fail if using the command with a different relation kind. Views, sequences and materialized views cannot be part of a partition tree, so these would cause the command to fail anyway, but the assertion was triggered. Foreign tables can be part of a partition tree, and again the assertion would have failed. The simplest solution is just to remove this assertion, so as we get the same failure as the non-concurrent code path. While on it, add a regression test in postgres_fdw for the concurrent partition detach of a foreign table, as per a suggestion from Alexander Lakhin. Issue introduced in 71f4c8c. Reported-by: Alexander Lakhin Author: Michael Paquier, Alexander Lakhin Reviewed-by: Peter Eisentraut, Kyotaro Horiguchi Discussion: https://postgr.es/m/17339-a9e09aaf38a3457a@postgresql.org Backpatch-through: 14
1 parent cc8b257 commit 2e577c9

File tree

3 files changed

+6
-2
lines changed

3 files changed

+6
-2
lines changed

contrib/postgres_fdw/expected/postgres_fdw.out

+3
Original file line numberDiff line numberDiff line change
@@ -6485,6 +6485,9 @@ CREATE FOREIGN TABLE foreign_tbl (a int, b int)
64856485
SERVER loopback OPTIONS (table_name 'child_tbl');
64866486
CREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);
64876487
ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);
6488+
-- Detach and re-attach once, to stress the concurrent detach case.
6489+
ALTER TABLE parent_tbl DETACH PARTITION foreign_tbl CONCURRENTLY;
6490+
ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);
64886491
CREATE VIEW rw_view AS SELECT * FROM parent_tbl
64896492
WHERE a < b WITH CHECK OPTION;
64906493
\d+ rw_view

contrib/postgres_fdw/sql/postgres_fdw.sql

+3
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,9 @@ CREATE FOREIGN TABLE foreign_tbl (a int, b int)
14901490

14911491
CREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);
14921492
ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);
1493+
-- Detach and re-attach once, to stress the concurrent detach case.
1494+
ALTER TABLE parent_tbl DETACH PARTITION foreign_tbl CONCURRENTLY;
1495+
ALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);
14931496

14941497
CREATE VIEW rw_view AS SELECT * FROM parent_tbl
14951498
WHERE a < b WITH CHECK OPTION;

src/backend/commands/tablecmds.c

-2
Original file line numberDiff line numberDiff line change
@@ -15013,8 +15013,6 @@ MarkInheritDetached(Relation child_rel, Relation parent_rel)
1501315013
HeapTuple inheritsTuple;
1501415014
bool found = false;
1501515015

15016-
Assert(child_rel->rd_rel->relkind == RELKIND_RELATION ||
15017-
child_rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE);
1501815016
Assert(parent_rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE);
1501915017

1502015018
/*

0 commit comments

Comments
 (0)