postgresql/src/backend
Dean Rasheed f025f2390e 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
2021-07-05 10:16:42 +01:00
..
access Use InvalidBucket instead of -1 where appropriate 2021-07-02 11:59:55 +02:00
bootstrap Rethink definition of pg_attribute.attcompression. 2021-05-27 13:24:27 -04:00
catalog genbki stricter error handling 2021-06-30 08:50:26 +02:00
commands Don't reset relhasindex for partitioned tables on ANALYZE 2021-07-01 12:56:30 -04:00
executor Cleanup some aggregate code in the executor 2021-07-04 18:47:31 +12:00
foreign Update copyright for 2021 2021-01-02 13:06:25 -05:00
jit Prepare for forthcoming LLVM 13 API change. 2021-06-25 11:28:20 +12:00
lib Fix typo in comment 2021-04-20 14:35:16 +02:00
libpq Don't assume GSSAPI result strings are null-terminated. 2021-06-23 14:01:32 -04:00
main Update copyright for 2021 2021-01-02 13:06:25 -05:00
nodes Reconsider the handling of procedure OUT parameters. 2021-06-10 17:11:36 -04:00
optimizer Reconsider the handling of procedure OUT parameters. 2021-06-10 17:11:36 -04:00
parser Cleanup some aggregate code in the executor 2021-07-04 18:47:31 +12:00
partitioning Fix bogus logic for reporting which hash partition conflicts. 2021-06-29 14:34:31 -04:00
po Translation updates 2021-06-21 12:33:50 +02:00
port Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
postmaster Message style improvements 2021-06-28 08:36:44 +02:00
regex Fix performance issue in new regex match-all detection code. 2021-05-03 11:42:31 -04:00
replication Don't try to print data type names in slot_store_error_callback(). 2021-07-02 16:04:54 -04:00
rewrite Adjust locations which have an incorrect copyright year 2021-06-04 12:19:50 +12:00
snowball Update snowball 2021-02-19 08:10:15 +01:00
statistics Error message refactoring 2021-06-27 09:41:16 +02:00
storage Remove some dead stores. 2021-07-02 13:32:21 +12:00
tcop Message style improvements 2021-06-28 08:36:44 +02:00
tsearch Improve various places that double the size of a buffer 2021-07-01 15:29:06 +12:00
utils Prevent numeric overflows in parallel numeric aggregates. 2021-07-05 10:16:42 +01:00
.gitignore Add .gitignore entries for AIX-specific intermediate build artifacts. 2015-07-08 20:44:22 -04:00
common.mk Remove PARTIAL_LINKING build mode. 2018-03-30 17:33:04 -07:00
Makefile Use sort_template.h for qsort_tuple() and qsort_ssup(). 2021-03-03 17:02:32 +13:00
nls.mk Translation updates 2021-05-10 14:36:21 +02:00