Skip to content
immudb docker run -d --net host -it --name immudb codenotary/immudb:latest

SQL Standard Library

From immudb v1.1.0 is possible to use go standard library sql interface to query data.

 1package main
 2
 3import (
 4	"context"
 5	"fmt"
 6	"log"
 7
 8	immudb "github.com/codenotary/immudb/pkg/client"
 9	"github.com/codenotary/immudb/pkg/stdlib"
10)
11
12func main() {
13	opts := immudb.DefaultOptions()
14	opts.Username = "immudb"
15	opts.Password = "immudb"
16	opts.Database = "defaultdb"
17
18	db := stdlib.OpenDB(opts)
19	defer db.Close()
20
21	_, err := db.ExecContext(
22		context.TODO(),
23		"CREATE TABLE myTable(id INTEGER, name VARCHAR, PRIMARY KEY id)",
24	)
25	if err != nil {
26		log.Fatal(err)
27	}
28
29	_, err = db.ExecContext(
30		context.TODO(),
31		"INSERT INTO myTable (id, name) VALUES (1, 'immudb1')",
32	)
33	if err != nil {
34		log.Fatal(err)
35	}
36
37	rows, err := db.QueryContext(
38		context.TODO(),
39		"SELECT * FROM myTable",
40	)
41	if err != nil {
42		log.Fatal(err)
43	}
44	defer rows.Close()
45
46	if !rows.Next() {
47		log.Fatal("Did not fetch the row")
48	}
49
50	var id uint64
51	var name string
52	err = rows.Scan(&id, &name)
53	if err != nil {
54		log.Fatal(err)
55	}
56
57	fmt.Printf("id: %d\n", id)
58	fmt.Printf("name: %s\n", name)
59}

In alternative is possible to open immudb with a connection string:

 1package main
 2
 3import (
 4	"context"
 5	"fmt"
 6	"log"
 7
 8	"database/sql"
 9
10	_ "github.com/codenotary/immudb/pkg/stdlib"
11)
12
13func main() {
14	db, err := sql.Open(
15		"immudb",
16		"immudb://immudb:immudb@127.0.0.1:3322/defaultdb?sslmode=disable",
17	)
18	if err != nil {
19		log.Fatal(err)
20	}
21	defer db.Close()
22
23	_, err = db.ExecContext(
24		context.TODO(),
25		"CREATE TABLE myTable(id INTEGER, name VARCHAR, PRIMARY KEY id)",
26	)
27	if err != nil {
28		log.Fatal(err)
29	}
30
31	_, err = db.ExecContext(
32		context.TODO(),
33		"INSERT INTO myTable (id, name) VALUES (1, 'immudb1')",
34	)
35	if err != nil {
36		log.Fatal(err)
37	}
38
39	rows, err := db.QueryContext(
40		context.TODO(),
41		"SELECT * FROM myTable",
42	)
43	if err != nil {
44		log.Fatal(err)
45	}
46	defer rows.Close()
47
48	if !rows.Next() {
49		log.Fatal("Did not fetch the row")
50	}
51
52	var id uint64
53	var name string
54	err = rows.Scan(&id, &name)
55	if err != nil {
56		log.Fatal(err)
57	}
58
59	fmt.Printf("id: %d\n", id)
60	fmt.Printf("name: %s\n", name)
61}

Available SSL modes are:

  • disable. SSL is off
  • insecure-verify. SSL is on but client will not check the server name.
  • require. SSL is on.
Edit this page on GitHub Last updated