postgres.git / summary / log / commit / refs

commit    52f3de874bbeaf16b3ae2efb505c1117be8355cc
Author:   Alvaro Herrera <alvherre@alvh.no-ip.org>
Date:     Mon Aug 19 20:09:10 2024 +0000
First released in: 18.0, 14.14, 15.9, 16.5, 17.0

    Avoid failure to open dropped detached partition
    
    When a partition is detached and immediately dropped, a prepared
    statement could try to compute a new partition descriptor that includes
    it.  This leads to this kind of error:
    ERROR:  could not open relation with OID 457639
    
    Avoid this by skipping the partition in expand_partitioned_rtentry if it
    doesn't exist.
    
    Noted by me while investigating bug #18559.  Kuntal Gosh helped to
    identify the exact failure.
    
    Backpatch to 14, where DETACH CONCURRENTLY was introduced.
    
    Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
    Reviewed-by: Kuntal Ghosh <kuntalghosh.2007@gmail.com>
    Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
    Discussion: https://postgr.es/m/202408122233.bo4adt3vh5bi@alvherre.pgsql


src/backend/optimizer/util/inherit.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index 4797312ae53..c5b906a9d43 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -386,8 +386,17 @@ expand_partitioned_rtentry(PlannerInfo *root, RelOptInfo *relinfo, Index childRTindex; RelOptInfo *childrelinfo; - /* Open rel, acquiring required locks */ - childrel = table_open(childOID, lockmode); + /* + * Open rel, acquiring required locks. If a partition was recently + * detached and subsequently dropped, then opening it will fail. In + * this case, behave as though the partition had been pruned. + */ + childrel = try_table_open(childOID, lockmode); + if (childrel == NULL) + { + relinfo->live_parts = bms_del_member(relinfo->live_parts, i); + continue; + } /* * Temporary partitions belonging to other sessions should have been [parent: 0d06a7eac4b2]