From 186f632f88a28b5576d2bffefb58dcf1720ef508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 17 Jun 2019 03:34:34 -0700 Subject: [PATCH] ReleaseSysCache in logical_optimizer --- .../planner/multi_logical_optimizer.c | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index f7da0ff05..d9da6a421 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -1510,9 +1510,9 @@ MasterAggregateExpression(Aggref *originalAggregate, AggClauseCosts aggregateCosts; HeapTuple aggTuple; Form_pg_aggregate aggform; - Oid combinefn; - Oid serialfn = InvalidOid; - Oid deserialfn = InvalidOid; + Oid combine; + Oid serial = InvalidOid; + Oid deserial = InvalidOid; aggTuple = SearchSysCache1(AGGFNOID, ObjectIdGetDatum(originalAggregate->aggfnoid)); @@ -1520,15 +1520,15 @@ MasterAggregateExpression(Aggref *originalAggregate, elog(ERROR, "cache lookup failed for aggregate %u", originalAggregate->aggfnoid); aggform = (Form_pg_aggregate) GETSTRUCT(aggTuple); + combine = aggform->aggcombinefn; + if (IsValidOid(combine) && originalAggregate->aggtranstype == INTERNALOID) { + serial = aggform->aggserialfn; + deserial = aggform->aggdeserialfn; + } + ReleaseSysCache(aggTuple); - /* planner recorded transition state type in the Aggref itself */ - combinefn = aggform->aggcombinefn; + if (IsValidOid(combine)) { - if (combinefn != InvalidOid) { - if (originalAggregate->aggtranstype == INTERNALOID) { - serialfn = aggform->aggserialfn; - deserialfn = aggform->aggdeserialfn; - } } else if (aggregateType == AGGREGATE_COUNT && originalAggregate->aggdistinct && CountDistinctErrorRate == DISABLE_DISTINCT_APPROXIMATION && walkerContext->pullDistinctColumns)