diff options
author | Alvaro Herrera | 2024-08-19 20:09:10 +0000 |
---|---|---|
committer | Alvaro Herrera | 2024-08-19 20:09:10 +0000 |
commit | 52f3de874bbeaf16b3ae2efb505c1117be8355cc (patch) | |
tree | eee572634071ce0419bdd427423128b89e4fa8eb | |
parent | 0d06a7eac4b23cc7b8fd4568d8623a6023646f63 (diff) |
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 <[email protected]>
Reviewed-by: Kuntal Ghosh <[email protected]>
Reviewed-by: Junwang Zhao <[email protected]>
Discussion: https://postgr.es/m/[email protected]
-rw-r--r-- | src/backend/optimizer/util/inherit.c | 13 |
1 files 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 |