CSV import benchmarks

One million CSV rows imported in under 8 seconds with Scriptella 1.6 on PostgreSQL and MariaDB.

Batched Scriptella took 7.775 seconds on PostgreSQL and 6.694 seconds on MariaDB. Handwritten JDBC was faster; csvsql’s tested direct-import workflow took about 6 minutes.

Benchmark results

Benchmark v4: single observations from the October 21, 2026 GitHub Actions run on Ubuntu 24.04. Lower is faster.

PostgreSQL durations: Scriptella batch 1000 7.775 seconds, JDBC batch 1000 6.320 seconds, csvsql chunk 1000 378.555 seconds, and native COPY 1.401 seconds.
PostgreSQL: logarithmic duration axis. Read the printed seconds for absolute differences.
MariaDB durations: Scriptella batch 1000 6.694 seconds, JDBC batch 1000 4.465 seconds, and csvsql chunk 1000 370.594 seconds.
MariaDB: logarithmic duration axis. Read the printed seconds for absolute differences.

Same million-row CSV, pre-created tables, one transaction per import, no indexes or transformations. Timings include client startup, CSV parsing, insertion, and commit; setup and verification are excluded. PostgreSQL batch rewriting is enabled for both Scriptella and JDBC; MariaDB uses driver defaults. These are single observations, not repeated-run medians. Results depend on workload and environment; PostgreSQL COPY is a database-specific reference.

See the benchmarks repository for full results and environment details, methodology, and instructions to reproduce the comparison.

For tuning advice, see the batching and insert performance guide.

Further reading: Importing a million CSV rows and how PostgreSQL batch rewriting improved import performance on PVR Labs.