Go Database Benchmark
This tests the performance of pgx native, pgx through database/sql, pq through database/sql, go-pg, and theoretical maximum PostgreSQL performance. Unless the test specifically states otherwise it always uses prepared statements.
go_db_bench reads its configuration from the environment:
PGHOST - defaults to localhost PGPORT - defaults to 5432 PGUSER - default to OS user PGPASSWORD - defaults to empty string PGDATABASE - defaults to go_db_bench PGSSLMODE - defaults to disable
go_db_bench includes tests selecting one value, one row, and multiple rows.
PGHOST=/private/tmp go test -test.bench=. -test.benchmem
go_db_bench includes a simple HTTP server that serves JSON directly from PostgreSQL. This allows testing the performance of database drivers in a more real-world environment.
go build && PGHOST=/private/tmp ./go_db_bench
It exposes the following endpoints:
- /people/pgx-native - pgx through its native interface
- /people/pgx-stdlib - pgx through database/sql
- /people/pq - pq through database/sql
Theoretical Max PostgreSQL Performance
This benchmark includes a minimum PostgreSQL driver sufficient to establish a connection and prepare statements. Query execution is benchmarked by sending a byte filled with the query command and reading until the ready for query message is received. This should be the theoretical best performance a Go PostgreSQL driver could achieve.
Caveat: The returned data is not checked or parsed. It is only read until the ready for query message is received. If an error occurs it may not be apparent which could cause the timing to be misleading.