From: | Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Prevent numeric overflows in parallel numeric aggregates. |
Date: | 2021-07-05 09:21:42 |
Message-ID: | E1m0KnO-00038a-Ny@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Prevent numeric overflows in parallel numeric aggregates.
Formerly various numeric aggregate functions supported parallel
aggregation by having each worker convert partial aggregate values to
Numeric and use numeric_send() as part of serializing their state.
That's problematic, since the range of Numeric is smaller than that of
NumericVar, so it's possible for it to overflow (on either side of the
decimal point) in cases that would succeed in non-parallel mode.
Fix by serializing NumericVars instead, to avoid the overflow risk and
ensure that parallel and non-parallel modes work the same.
A side benefit is that this improves the efficiency of the
serialization/deserialization code, which can make a noticeable
difference to performance with large numbers of parallel workers.
No back-patch due to risk from changing the binary format of the
aggregate serialization states, as well as lack of prior field
complaints and low probability of such overflows in practice.
Patch by me. Thanks to David Rowley for review and performance
testing, and Ranier Vilela for an additional suggestion.
Discussion: https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/f025f2390e13d7da69da595086fb982bbaf7f329
Modified Files
--------------
src/backend/utils/adt/numeric.c | 255 ++++++++++++++++------------------
src/test/regress/expected/numeric.out | 50 +++++++
src/test/regress/sql/numeric.sql | 36 +++++
3 files changed, 203 insertions(+), 138 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2021-07-05 18:35:36 | pgsql: Rethink blocking annotations in detach-partition-concurrently-[3 |
Previous Message | Peter Eisentraut | 2021-07-05 06:33:23 | pgsql: doc: Fix quoting markup |