Sqlconnect provides a uniform client interface for accessing multiple warehouses:
- bigquery (configuration)
- databricks (configuration)
- mysql (configuration)
- postgres (configuration)
- redshift using data API driver (configuration)
- redshift using postgres driver (configuration)
- snowflake (configuration)
- trino (configuration)
go get github.com/rudderlabs/sqlconnect-go
All available DB
methods can be found here
Loading all necessary db drivers
import _ "github.com/rudderlabs/sqlconnect-go/sqlconnect/config"
Creating a new DB client
db, err := sqlconnect.NewDB("postgres", []byte(`{
"host": "postgres.example.com",
"port": 5432,
"dbname": "dbname",
"user": "user",
"password": "password"
}`))
if err != nil {
panic(err)
}
Creating a new DB client using legacy mappings for backwards compatibility
db, err := sqlconnect.NewDB("postgres", []byte(`{
"host": "postgres.example.com",
"port": 5432,
"dbname": "dbname",
"user": "user",
"password": "password",
"legacyMappings": useLegacyMappings
}`))
if err != nil {
panic(err)
}
Performing admin operations
{ // schema admin
exists, err := db.SchemaExists(ctx, sqlconnect.SchemaRef{Name: "schema"})
if err != nil {
panic(err)
}
if !exists {
err = db.CreateSchema(ctx, sqlconnect.SchemaRef{Name: "schema"})
if err != nil {
panic(err)
}
}
}
// table admin
{
exists, err := db.TableExists(ctx, sqlconnect.NewRelationRef("table", sqlconnect.WithSchema("schema")))
if err != nil {
panic(err)
}
if !exists {
err = db.CreateTestTable(ctx, sqlconnect.RelationRef{Schema: "schema", Name: "table"})
if err != nil {
panic(err)
}
}
}
Using the async query API
table := sqlconnect.NewRelationRef("table", sqlconnect.WithSchema("schema"))
ch, leave := sqlconnect.QueryJSONAsync(ctx, db, "SELECT * FROM " + db.QuoteTable(table))
defer leave()
for row := range ch {
if row.Err != nil {
panic(row.Err)
}
_ = row.Value
}
SplitStatements: Splits a string of SQL statements separated with semicolons into individual statements
import sqlconnectutil "github.com/rudderlabs/sqlconnect-go/sqlconnect/util"
func main() {
statements := sqlconnectutil.SplitStatements("SELECT * FROM table; SELECT * FROM table;")
}