---
title: SQL Database Drivers
---

The database/sql and database/sql/driver packages are designed for using databases from Go and implementing database drivers, respectively.

See the design goals doc:

> http://golang.org/src/pkg/database/sql/doc.txt

## Drivers

Drivers for Go's sql package include:

  * **Amazon AWS Athena**: https://github.com/uber/athenadriver
  * **AWS Athena**: https://github.com/segmentio/go-athena
  * **AWS DynamoDB**: https://github.com/btnguyen2k/godynamo
  * **Apache Avatica/Phoenix**: https://github.com/apache/calcite-avatica-go
  * **Apache H2**: https://github.com/jmrobles/h2go
  * **Apache Hive**: https://github.com/sql-machine-learning/gohive
  * **Apache Ignite/GridGain**: https://github.com/amsokol/ignite-go-client
  * **Apache Impala**: https://github.com/bippio/go-impala
  * **Azure Cosmos DB**: https://github.com/btnguyen2k/gocosmos
  * **ClickHouse** (uses [HTTP API](https://clickhouse.tech/docs/en/interfaces/http/)): https://github.com/mailru/go-clickhouse
  * **ClickHouse** (uses [native TCP interface](https://clickhouse.tech/docs/en/interfaces/tcp/)): https://github.com/ClickHouse/clickhouse-go
  * **CockroachDB**: Use any PostgreSQL driver
  * **Couchbase N1QL**: https://github.com/couchbase/go_n1ql
  * **DB2 LUW** (uses cgo): https://github.com/asifjalil/cli
  * **DB2 LUW** and **DB2/Z with DB2-Connect**: https://bitbucket.org/phiggins/db2cli (Last updated 2015-08)
  * **DB2 LUW, z/OS, iSeries and Informix**: https://github.com/ibmdb/go_ibm_db
  * **Databricks**: https://github.com/databricks/databricks-sql-go
  * **DuckDB**: https://github.com/marcboeker/go-duckdb
  * **Exasol**: (pure Go): https://github.com/exasol/exasol-driver-go
  * **Firebird SQL**: https://github.com/nakagami/firebirdsql
  * **Genji** (pure go): https://github.com/genjidb/genji
  * **Google Cloud BigQuery**: https://github.com/solcates/go-sql-bigquery
  * **Google Cloud Spanner**: https://github.com/googleapis/go-sql-spanner
  * **Google Cloud Spanner**: https://github.com/rakyll/go-sql-driver-spanner
  * **MS ADODB**: https://github.com/mattn/go-adodb
  * **MS SQL Server** (pure go): https://github.com/microsoft/go-mssqldb
  * **MS SQL Server** (uses cgo): https://github.com/minus5/gofreetds
  * **MaxCompute**: https://github.com/sql-machine-learning/gomaxcompute
  * **MySQL**: https://github.com/go-sql-driver/mysql/ ` [*] `
  * **MySQL**: https://github.com/go-mysql-org/go-mysql ` [**] ` (also handles replication)
  * **MySQL**: https://github.com/ziutek/mymysql ` [*] `
  * **ODBC**: https://bitbucket.org/miquella/mgodbc (Last updated 2016-02)
  * **ODBC**: https://github.com/alexbrainman/odbc
  * **Oracle** (pure go): https://github.com/sijms/go-ora
  * **Oracle** (uses cgo): https://github.com/godror/godror
  * **Oracle** (uses cgo): https://github.com/mattn/go-oci8
  * **Oracle** (uses cgo): https://gopkg.in/rana/ora.v4
  * **Postgres** (pure Go): https://github.com/jackc/pgx ` [*] `
  * **Postgres** (pure Go): https://github.com/lib/pq ` [*] `
  * **Postgres** (uses cgo): https://github.com/jbarham/gopgsqldriver
  * **Presto**: https://github.com/prestodb/presto-go-client
  * **QL**: https://pkg.go.dev/modernc.org/ql
  * **SAP ASE** (pure go): https://github.com/SAP/go-ase
  * **SAP ASE** (uses cgo): https://github.com/SAP/cgo-ase
  * **SAP HANA** (pure go): https://github.com/SAP/go-hdb
  * **SAP HANA** (uses cgo): https://help.sap.com/viewer/0eec0d68141541d1b07893a39944924e/2.0.03/en-US/0ffbe86c9d9f44338441829c6bee15e6.html
  * **SQL over REST**: https://github.com/adaptant-labs/go-sql-rest-driver
  * **SQLite** (uses cgo): https://github.com/gwenn/gosqlite - Supports SQLite dynamic data typing
  * **SQLite** (uses cgo): https://github.com/mattn/go-sqlite3 ` [*] `
  * **SQLite** (uses cgo): https://github.com/mxk/go-sqlite
  * **SQLite**: (pure go): https://modernc.org/sqlite
  * **SQLite**: (pure go): https://github.com/ncruces/go-sqlite3
  * **SQLite**: (uses cgo): https://github.com/rsc/sqlite
  * **SingleStore**: Use any MySQL driver
  * **Snowflake** (pure Go): https://github.com/snowflakedb/gosnowflake
  * **Sybase ASE** (pure go): https://github.com/thda/tds
  * **Sybase SQL Anywhere**: https://github.com/a-palchikov/sqlago
  * **TiDB**: Use any MySQL driver
  * **Trino**: https://github.com/trinodb/trino-go-client
  * **Vertica**: https://github.com/vertica/vertica-sql-go
  * **Vitess**: https://pkg.go.dev/vitess.io/vitess/go/vt/vitessdriver
  * **YDB** (pure go): https://github.com/ydb-platform/ydb-go-sdk
  * **YQL (Yahoo! Query Language)**: https://github.com/mattn/go-yql

Drivers marked with ` [*] ` are both included in and pass the compatibility test suite at https://github.com/bradfitz/go-sql-test.
Drivers marked with ` [**] ` pass the compatibility test suite but are not currently included in it.

