You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs/benchmarks.md publishes a cross-engine query latency table measured on a build where column projection was silently discarded. It understates pgColumnar substantially, in user-facing documentation.
Evidence
docs/benchmarks.md was last committed 2026-08-02 12:53 (9d55442). #339, which made the reader honour the projection, merged at 17:33 the same day -- 4.7 hours later. Every number in that table therefore comes from a build in which every query read and decoded every column of the table regardless of what it referenced (#338).
The published table (docs/benchmarks.md:378-391) currently states:
query
pgColumnar
TimescaleDB
heap
Citus
q6
81,966
1,771
14,699
8,810
q4
18,856
5,098
17,290
6,694
q5
22,671
10,437
21,247
15,407
Measured today on the bench, current main, same 100M fixture, fixtures asserted:
arm
time
buffers
pgColumnar q6, projection+fold, parallel
1,559 ms
70,416
pgColumnar q6, projection+fold, serial
4,357 ms
69,924
TimescaleDB q6, serial
5,597 ms
603,211
heap q6, parallel
9,067 ms
2,435,728
So the published q6 figure is off by a factor of roughly 50, in the direction of making the project look worse than it is. The table also shows pgColumnar losing to heap on q4 and q5; whether that still holds is unknown, because those are grouped shapes and nobody has measured what projection alone does to them.
What needs doing
Re-run the whole cross-engine table on current main. Not a one-row patch. Only q6 has been re-measured, and patching a single row of a table whose other rows come from a different build would be worse than leaving it consistent-but-stale.
Resolve the TimescaleDB parallel fault first, or the TimescaleDB column cannot be reproduced. On the bench box its parallel path fails:
ERROR: could not read blocks 0..0 in file "base/16384/6345917": read only 0 of 8192 bytes
CONTEXT: parallel worker
TimescaleDB 2.29.0, 3 chunks, all compressed. This looks like a fault in this installation rather than a property of TimescaleDB, and it means any cross-engine parallel comparison from this box is currently serial-vs-parallel and therefore unfair in pgColumnar's favour.
State the GUC configuration in the table. Three of the four levers default off (enable_ungrouped_vector_agg, enable_parallel_vector_agg, enable_group_vectorization). A number measured with them on is not what a default install gives, and the table should say which it is reporting.
Check the storage figures too. The body of Vectorized decompression + aggregation for full-scan aggregates (~4× behind TimescaleDB) #289 says 2.67 GB for pgColumnar against TimescaleDB's 7.79 GB; docs/benchmarks.md:369-373 says 6.4 GB against 7.8 GB at the same row count. The TimescaleDB side agrees between the two, the pgColumnar side does not. One of them is wrong and I could not determine which.
Why this is worth a separate issue
A stale number in an issue misleads the people working on it. A stale number in docs/ misleads everyone who reads the project. This one is also stale in the unusual direction -- it makes pgColumnar look far worse than it measures today -- so it is unlikely to be caught by anyone defending a claim.
Summary
docs/benchmarks.mdpublishes a cross-engine query latency table measured on a build where column projection was silently discarded. It understates pgColumnar substantially, in user-facing documentation.Evidence
docs/benchmarks.mdwas last committed 2026-08-02 12:53 (9d55442). #339, which made the reader honour the projection, merged at 17:33 the same day -- 4.7 hours later. Every number in that table therefore comes from a build in which every query read and decoded every column of the table regardless of what it referenced (#338).The published table (
docs/benchmarks.md:378-391) currently states:Measured today on the bench, current main, same 100M fixture, fixtures asserted:
So the published q6 figure is off by a factor of roughly 50, in the direction of making the project look worse than it is. The table also shows pgColumnar losing to heap on q4 and q5; whether that still holds is unknown, because those are grouped shapes and nobody has measured what projection alone does to them.
What needs doing
enable_ungrouped_vector_agg,enable_parallel_vector_agg,enable_group_vectorization). A number measured with them on is not what a default install gives, and the table should say which it is reporting.docs/benchmarks.md:369-373says 6.4 GB against 7.8 GB at the same row count. The TimescaleDB side agrees between the two, the pgColumnar side does not. One of them is wrong and I could not determine which.Why this is worth a separate issue
A stale number in an issue misleads the people working on it. A stale number in
docs/misleads everyone who reads the project. This one is also stale in the unusual direction -- it makes pgColumnar look far worse than it measures today -- so it is unlikely to be caught by anyone defending a claim.