Go: database/sql
Connects, creates a todo table if it does not exist, inserts a row and counts open rows. The code is the same against the original database and against MachSQL; only the address changes.
The only change
Section titled “The only change”DATABASE_URL=postgres://app:${DB_PASSWORD}@old-postgres:5432/appDATABASE_URL=postgres://app:${DB_PASSWORD}@machsql-host:5432/appNothing else changes: not the code, not the driver, not its version, not the SQL.
Versions
Section titled “Versions”- Go 1.27
- pgx v5.11.0 (
stdlibdriver)
go mod tidyexport DATABASE_URL=postgres://app:${DB_PASSWORD}@machsql-host:5432/appgo run .Expected output: inserted todo <id>, <n> open.
Source
Section titled “Source”The program as it is kept and tested in the Mach Database for PostgreSQL repository; highlighted lines read the connection setting.
// database/sql with pgx's stdlib driver.package main
import ( "database/sql" "fmt" "os"
_ "github.com/jackc/pgx/v5/stdlib")
func main() { db, err := sql.Open("pgx", os.Getenv("DATABASE_URL")) if err != nil { fail(err) } defer db.Close()
if _, err := db.Exec("CREATE TABLE IF NOT EXISTS todo (id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, title text NOT NULL, done boolean NOT NULL DEFAULT false)"); err != nil { fail(err) } var id int64 if err := db.QueryRow("INSERT INTO todo (title) VALUES ($1) RETURNING id", "write the examples").Scan(&id); err != nil { fail(err) } var open int64 if err := db.QueryRow("SELECT count(*) FROM todo WHERE NOT done").Scan(&open); err != nil { fail(err) } fmt.Printf("inserted todo %d, %d open\n", id, open)}
func fail(err error) { fmt.Fprintln(os.Stderr, err) os.Exit(1)}module example.com/machsql/go-database-sql
go 1.27
require github.com/jackc/pgx/v5 v5.11.0