Every question across customers is a full table scan in DynamoDB: 217,000 read units at 5 million orders, whether it returns 10 rows or all of them. Postgres answered the same 16 questions in 0.08 to 2.7 seconds without a single index added for them, and an index built in 2.7 seconds took one from 148 ms to 44 ms. Measured in AWS.
The question that decides most database choices isn't the one you design for. It's the report someone asks for in month six. We asked 16 of them of the same data in Postgres and DynamoDB.
Postgres
DynamoDB
Median time to answer, 5 million orders (log scale). DynamoDB: a 16-segment parallel scan, aggregated in the client. Our measurements, November 2026.
The full report has all 16 questions at three table sizes, the read units and cost of each scan, why a filter doesn't make a scan cheaper, what the client spent its time on, and what indexes changed in Postgres.
We'll look at what you need to answer and how often, and tell you whether an export, a stream or Postgres fits. 30 minutes, free.
Once a month: what changed in tech that month and what it means for you, from cloud and AI to security and the tools you build with. Every item links to its source. No sales pitch, unsubscribe in one click.
Book a free 30-minute call about it. Bring your setup and your bill; you'll leave knowing what we'd do first and roughly what it costs, whether or not you hire us.
Or keep reading
DynamoDB vs Postgres, Measured in AWS: 53 Workloads From the Same Client
We ran 53 workloads against RDS Postgres 17 and DynamoDB from one Fargate task in the same Availability Zone, at 100,000, 1 million and 5 million orders. Key lookups took 0.35 ms in Postgres and 2.7 ms in DynamoDB; a two-item transaction 1.75 ms against 20 ms; a question nobody designed for, 0.08–2.7 s against a full table scan. The full results, with the method and every caveat.
Read
Concurrent Transactions, Measured: Deadlocks, Lock Order and Conflicts in Postgres and DynamoDB
Moving money between 10 accounts with 64 concurrent workers, Postgres committed 5 transfers a second when rows were locked in random order (50 deadlocks, median wait 24 s) and 1,185 a second when locked in a fixed order. DynamoDB committed 228 a second and cancelled 14,344. Also: hot counters, sharding, and serializable isolation.
Read
As of November 9, 2026. Provided as is, for general information, and accurate to the best of our knowledge on the date shown. Not legal, compliance, tax, financial or other professional advice. Prices, limits and vendor services change; check current vendor documentation before relying on anything here. Terms of use.