mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Allow negative aggtransspace to indicate unbounded state size
This patch reuses the existing aggtransspace in pg_aggregate to signal that an aggregate's transition state can grow unboundedly. If aggtransspace is set to a negative value, it now indicates that the transition state may consume unpredictable or large amounts of memory, such as in aggregates like array_agg or string_agg that accumulate input rows. This information can be used by the planner to avoid applying memory-sensitive optimizations (e.g., eager aggregation) when there is a risk of excessive memory usage during partial aggregation. Bump catalog version. Per idea from Robert Haas, though applied differently than originally suggested. Discussion: https://postgr.es/m/CA+TgmoYbkvYwLa+1vOP7RDY7kO2=A7rppoPusoRXe44VDOGBPg@mail.gmail.com
This commit is contained in:
@@ -1470,7 +1470,7 @@ WHERE aggfnoid = 0 OR aggtransfn = 0 OR
|
||||
(aggkind = 'n' AND aggnumdirectargs > 0) OR
|
||||
aggfinalmodify NOT IN ('r', 's', 'w') OR
|
||||
aggmfinalmodify NOT IN ('r', 's', 'w') OR
|
||||
aggtranstype = 0 OR aggtransspace < 0 OR aggmtransspace < 0;
|
||||
aggtranstype = 0 OR aggmtransspace < 0;
|
||||
ctid | aggfnoid
|
||||
------+----------
|
||||
(0 rows)
|
||||
|
||||
@@ -847,7 +847,7 @@ WHERE aggfnoid = 0 OR aggtransfn = 0 OR
|
||||
(aggkind = 'n' AND aggnumdirectargs > 0) OR
|
||||
aggfinalmodify NOT IN ('r', 's', 'w') OR
|
||||
aggmfinalmodify NOT IN ('r', 's', 'w') OR
|
||||
aggtranstype = 0 OR aggtransspace < 0 OR aggmtransspace < 0;
|
||||
aggtranstype = 0 OR aggmtransspace < 0;
|
||||
|
||||
-- Make sure the matching pg_proc entry is sensible, too.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user