Backport to 2.28.x: #10209: Fix potential incorrect stddev(float8/4) in columnar pipeline - #10269
Merged
Merged
Conversation
Postgres uses the same float8_accum transition function for both avg() and stddev() for these types. TimescaleDB used to use a simplified implementation for avg(), because it doesn't require tracking sum of squares. However, Postgres uses a shared transition state for aggregates sharing a transition functions, as given by AggRef.aggtransno. This leads to potentially wrong result when both avg() and stddev() of same variable are computed in one query. Change the aggregation states in columnar aggregation to follow aggtransno. Remove the "float8 accum with no squares" implementation because it cannot be safely used in general case, and checking for special cases is complicated. (cherry picked from commit 58e9840)
timescale-automation
enabled auto-merge (rebase)
July 16, 2026 08:57
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an automated backport of #10209: Fix potential incorrect stddev(float8/4) in columnar pipeline.
The original issue is #10203.
This PR will be merged automatically after all the relevant CI checks pass. If this fix should not be backported, or will be backported manually, just close this PR. You can use the backport branch to add your changes, it won't be modified automatically anymore.
For more details, please see the documentation
Original description
Fix potential incorrect stddev(float8/4) in columnar pipeline
Postgres uses the same float8_accum transition function for both avg() and stddev() for these types. TimescaleDB used to use a simplified implementation for avg(), because it doesn't require tracking sum of squares. However, Postgres uses a shared transition state for aggregates sharing a transition functions, as given by AggRef.aggtransno. This leads to potentially wrong result when both avg() and stddev() of same variable are computed in one query.
Change the aggregation states in columnar aggregation to follow aggtransno. Remove the "float8 accum with no squares" implementation because it cannot be safely used in general case, and checking for special cases is complicated.
Fixes #10203