Home Expressions
Docs
Drivers Gateway SDKs Benchmarks
Changelog
GitHub
Blog Status Roadmap
← Back to benchmark index
Historical COPY snapshot December 26, 2025

December 26, 2025 COPY and Query Snapshot

100M-row COPY and query throughput measurements for the Rust and Python PostgreSQL paths.

1.36M

COPY rows/second for the Rust path in this dated run

1.28x
COPY / asyncpg
100M rows
2.24x
Sequential / asyncpg
single connection
24x
Pipelined / asyncpg
historical snapshot

COPY Bulk Insert Throughput

100 million rows, 10,000 rows per COPY, and 10,000 COPY operations.

DriverImplementationRows/sTime (100M)Relative to asyncpg
qail-pg (Rust)Pure Rust (Tokio)1,363,77673.3s1.28x
qail-pyPython driver plus Rust core1,214,14182.4s1.14x
asyncpgPython driver plus Cython core1,062,94294.1sbaseline

Workload note

At 100M rows, PostgreSQL server and storage behavior contribute materially to total runtime in addition to client-side encoding. Read this page as a dated system snapshot rather than a transport-only benchmark.

Snapshot Summary

BenchmarkRustqail-pyasyncpgNormalized ordering
COPY bulk insert (100M)1.36M r/s1.21M r/s1.06M r/sRust 1.00x, qail-py 0.89x, asyncpg 0.78x
Sequential queries38.9K q/s27.7K q/s17.4K q/sRust 1.00x, qail-py 0.71x, asyncpg 0.45x
Pipelined queries384.6K q/s122.4K q/s~16K q/sRust 1.00x, qail-py 0.32x, asyncpg ~0.04x

Test environment

Hardware

  • Apple M3 Pro
  • macOS arm64
  • localhost PostgreSQL

Software

  • PostgreSQL 18
  • Python 3.13.7
  • Rust stable

Test config

  • Single connection
  • No pooling
  • Prepared statements