benchmarks

Real applications, real datasets, run side by side on vanilla postgres and lastbase.

No synthetic keys, no tuned-for-demo indexes. Actual open-source apps loaded with production-scale public data, then queried the same way against both databases.

headline result

twenty (crm) - count over 29.4M person rows

github.com/twentyhq/twenty + GDELT: 29,379,852 person rows, 37,102,216 company rows
88x faster
vanilla postgreslastbase
qps (8 workers)5.89518.17
elapsed6.792 s0.077 s

Identical data loaded into both via psql COPY. Full CRUD flow verified through the app's REST API on both backends.

all workloads

skyportal (astronomy)

ZTF public alert stream, 6.6GB nightly tarball ingested live
querypostgreslastbase
count WHERE flux>207.6 ms1.0 ms
point lookup by id0.66 ms2.0 ms
group by filter5.7 ms2.4 ms
ingest alerts/s839814

Mixed results, honestly. Scans and aggregates favor lastbase; single-row lookups favor postgres at this small scale.

dak (debian archive kit)

Debian stable archive: 2000 sources, 1968 binaries
postgreslastbase
qps, 50 threads15635.74112.9

A loss, reported anyway. On tiny fully-cached tables postgres is 3.8x faster. lastbase is built for data that does not fit in RAM.

musicbrainz

fullexport 20261017: 40.5M recordings, 58.4M tracks, 5.8M releases (59.4 GB)
querypostgres 16
artist pk lookup100 ms (cached)
track pk lookup100 ms (cached)
insert 10k rows110 ms (90,909 rows/s)

Scale reference: parallel connections scale cleanly 1 to 64 before slowdown.

odoo (erp)

UK HM Land Registry price paid: 31,610,742 rows, 5.3 GB table
value
COPY ingest390,000 rows/s
ORM search_countmatches psql count exactly
xmlrpc bench (64t)3.0 req/s, p95 7.1 s

The ORM through the full app stack is the bottleneck, not the database.

bookwyrm

OpenLibrary works: 45,066,337 book rows
querylastbase
count(*) books2712 ms
pk lookup0.202 ms
ILIKE search0.530 ms
insert 10k666,666 rows/s

logto (identity)

GH Archive events: 11,548,008 log rows, 1.2M users, 4.7 GB db
clientsavg latency
82.9 ms
322.4 ms
1282.3 ms

Ingest sustained 7,900 rows/s. Latency flat from 8 to 128 concurrent clients.

discourse (forums)

fineweb CC-MAIN-2013-20: 5,430,029 posts, 15 GB text
postgres 16
COPY ingest13,200 rows/s
ILIKE seq scan 15GB66 s
web 2 req/savg 91 ms, 0 errors

chatwoot (support)

pushshift reddit: 804,711 messages, 101,126 conversations
postgres
COPY ingest7,000 rows/s
mixed bench 120s112 count/s, 0 errors

hatchet (task queue)

wikimedia wikipedia dumps: 28,253 events, 28,365 tasks
bench qps950.17
avg query4.52 ms

concourse (ci)

concourse's own ci pipeline: 20 repos, 10 builds, 45 containers
sustained parallelism45 containers
lost workers0
fly builds api0.03 s/call

zitadel (iam)

GH Archive identities: 15,397,424 unique names, 476,805 users created
api ingest peak400 users/s
session delete visibility<5 s

Key finding: postgres-backed event projections lag behind sustained ingest; a new user row took 10+ minutes to appear under load.

method

Every workload uses a real open-source application with its real schema, loaded with public production-scale data (OpenLibrary, GDELT, ZTF, GH Archive, pushshift reddit, UK Land Registry, geofabrik OSM, wikipedia dumps). No docker. Both databases run on the same class of bare-metal host. Numbers are recorded from single runs unless noted; where postgres won, it stays on the page.

Want to run your own query? Subscribe and point psql at your connection string.