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
This commit is contained in:
Alvaro Herrera 2024-08-19 16:09:10 -04:00
parent 0d06a7eac4
commit 52f3de874b
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
1 changed files with 11 additions and 2 deletions

View File

@ -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