From 4131f755d548f74eba56285dc674f1f26e4ed6b4 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 8 Apr 2021 00:46:14 -0400 Subject: [PATCH] Repair find_inheritance_children with no active snapshot When working on a scan with only a catalog snapshot, we may not have an ActiveSnapshot set. If we were to come across a detached partition, that would cause a crash. Fix by only ignoring detached partitions when there's an active snapshot. --- src/backend/catalog/pg_inherits.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index bedee069be..bb8b2249b1 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -106,10 +106,13 @@ find_inheritance_children(Oid parentrelId, bool include_detached, * * The reason for this check is that we want to avoid seeing the * partition as alive in RI queries during REPEATABLE READ or - * SERIALIZABLE transactions. + * SERIALIZABLE transactions. (If there's no active snapshot set, + * that means we're not running a user query, so it's OK to always + * include detached partitions in that case.) */ if (((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhdetachpending && - !include_detached) + !include_detached && + ActiveSnapshotSet()) { TransactionId xmin; Snapshot snap;