From d681bbacfd56db07a145b2981e8a4354f2388740 Mon Sep 17 00:00:00 2001 From: Ivan Kush Date: Fri, 31 Oct 2025 21:20:12 +0300 Subject: [PATCH] Move PushActiveSnapshot outside a for loop (#8253) In the PR [8142](https://github.com/citusdata/citus/pull/8142) was added `PushActiveSnapshot`. This commit places it outside a for loop as taking a snapshot is a resource heavy operation. --- src/backend/columnar/columnar_metadata.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/backend/columnar/columnar_metadata.c b/src/backend/columnar/columnar_metadata.c index 0b4f2400c..159c126f7 100644 --- a/src/backend/columnar/columnar_metadata.c +++ b/src/backend/columnar/columnar_metadata.c @@ -618,7 +618,13 @@ SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, Oid columnarChunkOid = ColumnarChunkRelationId(); Relation columnarChunk = table_open(columnarChunkOid, RowExclusiveLock); ModifyState *modifyState = StartModifyRelation(columnarChunk); + bool pushed_snapshot = false; + if (!ActiveSnapshotSet()) + { + PushActiveSnapshot(GetTransactionSnapshot()); + pushed_snapshot = true; + } for (columnIndex = 0; columnIndex < columnCount; columnIndex++) { for (chunkIndex = 0; chunkIndex < chunkList->chunkCount; chunkIndex++) @@ -659,11 +665,13 @@ SaveStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, nulls[Anum_columnar_chunk_minimum_value - 1] = true; nulls[Anum_columnar_chunk_maximum_value - 1] = true; } - PushActiveSnapshot(GetTransactionSnapshot()); InsertTupleAndEnforceConstraints(modifyState, values, nulls); - PopActiveSnapshot(); } } + if (pushed_snapshot) + { + PopActiveSnapshot(); + } FinishModifyRelation(modifyState); table_close(columnarChunk, RowExclusiveLock);