Today's blog is a guest post by José Nieto, creator of upper/db. upper/db gives you tools for the most common operations with databases, and is now compatible with CockroachDB.
upper/db is a data access layer written in Go with ORM-like features. It's compatible with PostgreSQL, MySQL, SQLite, MongoDB, and now, CockroachDB! I am very pleased to announce that our CockroachDB adapter is now in beta and ready to be used!
Get the adapter the usual way:
go get github.com/upper/db/v4/adapter/cockroachdb
CockroachDB has two installation modes: secure and insecure. Secure mode has good defaults for production usage whilst insecure mode is more suited for local development and testing.
Here's an example on how to connect to a local insecure node using the cockroachdb adapter:
package main
import (
  "fmt"
  "log"
  "github.com/upper/db/v4/adapter/cockroachdb"
)
var settings = cockroachdb.ConnectionURL{
  Host:  "localhost",
  Database: "bank",
  User:  "maxroach",
  Options: map[string]string{
    "sslmode": "disable",
  },
}
func main() {
  sess, err := cockroachdb.Open(settings)
  if err != nil {
    log.Fatal("cockroachdb.Open: ", err)
  }
  defer sess.Close()
  fmt.Printf("connected to database %q\n", sess.Name())
}
Transactions
Transactions are essential when working with SQL databases as they allow you to represent several database-altering operations as a single unit.
upper/db comes with client-side retry handling logic, whenever a transaction fails with a retryable error, upper/db will wait a few milliseconds and try again until succeeding:
err = sess.Tx(func(tx db.Session) error {
    // If a retryable error happens here, the transaction will be retried a few
    // times (with exponential back-off).
    return nil
})
if err != nil {
    log.Fatal("Could not commit transaction: ", err)
}
If you want to configure the maximum number of transaction retries you can use the SetMaxTransactionRetries method:
sess.SetMaxTransactionRetries(10)
Build a Go App: Hello World Example
See the official Hello World repo for a tutorial on how to build a Go app with CockroachDB and upper/db, or check out all methods for building Go apps with CockroachDB.



