gofr-dev/gofr · error

not connected to database

Error message

not connected to database

What it means

errNotConnected is returned by the SurrealDB client's query-facing methods (Chat, Embed, Stream, and other operations) when the client has no live database instance — i.e. Connect was never called, failed, or the connection was closed. gofr guards every operation with an internal client nil/liveness check.

Source

Thrown at pkg/gofr/datasource/surrealdb/surrealdb.go:18

package surrealdb

import (
	"context"
	"errors"
	"fmt"
	"math"
	"strings"
	"time"

	"github.com/surrealdb/surrealdb.go"
	"github.com/surrealdb/surrealdb.go/pkg/models"
	"go.opentelemetry.io/otel/attribute"
	"go.opentelemetry.io/otel/trace"
)

var (
	errNotConnected             = errors.New("not connected to database")
	errNoDatabaseInstance       = errors.New("failed to connect to SurrealDB: no valid database instance")
	errInvalidCredentialsConfig = errors.New("both username and password must be provided")
	errNoRecord                 = errors.New("no record found")
	errNoResult                 = errors.New("no result found in query response")
	errUnexpectedResult         = errors.New("unexpected result type: expected []any")
	errQueryError               = errors.New("query error")
)

const (
	schemeHTTP      = "http"
	schemeHTTPS     = "https"
	schemeWS        = "ws"
	schemeWSS       = "wss"
	schemeMemory    = "memory"
	schemeMem       = "mem"
	schemeSurrealkv = "surrealkv"
	statusOK        = "OK"

View on GitHub (pinned to 187eb24962)

Solutions

  1. Call client.Connect and check its error before issuing any Chat/Embed/Stream calls.
  2. Verify SurrealDB is reachable (URL/provider config) so Connect succeeds.
  3. Recreate or reconnect the client if it was closed or previously failed.

Example fix

// before
client := surrealdb.New(cfg)
client.Chat(ctx, req) // not connected
// after
client := surrealdb.New(cfg)
if err := client.Connect(ctx); err != nil { log.Fatal(err) }
resp, err := client.Chat(ctx, req)
Defensive patterns

Strategy: try-catch

Validate before calling

if !client.IsConnected() { // or check connect error first
    if err := client.Connect(ctx); err != nil { return err }
}

Try / catch

resp, err := client.Chat(ctx, req)
if errors.Is(err, surrealdb.ErrNotConnected) {
    if cerr := client.Connect(ctx); cerr != nil { return cerr }
    resp, err = client.Chat(ctx, req)
}

Prevention

When it happens

Trigger: Calling client.Chat, client.Embed, or client.Stream before client.Connect succeeds, after Connect returns an error that was ignored, or after the SurrealDB instance was closed/reset.

Common situations: Using a client returned from a failed Connect, constructing the client directly without connecting, SurrealDB server down at startup so Connect failed, or reusing a client across lifecycle resets.

Related errors


AI-assisted analysis of gofr-dev/gofr@187eb24962 (2026-09-01). Data as JSON: /api/errors/a0cc9008321f0d2e. Report an issue: GitHub.