forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commitf025f23
committed
Prevent numeric overflows in parallel numeric aggregates.
Formerly various numeric aggregate functions supported parallelaggregation by having each worker convert partial aggregate values toNumeric and use numeric_send() as part of serializing their state.That's problematic, since the range of Numeric is smaller than that ofNumericVar, so it's possible for it to overflow (on either side of thedecimal point) in cases that would succeed in non-parallel mode.Fix by serializing NumericVars instead, to avoid the overflow risk andensure that parallel and non-parallel modes work the same.A side benefit is that this improves the efficiency of theserialization/deserialization code, which can make a noticeabledifference to performance with large numbers of parallel workers.No back-patch due to risk from changing the binary format of theaggregate serialization states, as well as lack of prior fieldcomplaints and low probability of such overflows in practice.Patch by me. Thanks to David Rowley for review and performancetesting, and Ranier Vilela for an additional suggestion.Discussion:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com1 parent903d9aa commitf025f23
File tree
3 files changed
+203
-138
lines changed- src
- backend/utils/adt
- test/regress
- expected
- sql
3 files changed
+203
-138
lines changed0 commit comments
Comments
(0)