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
- Call client.Connect and check its error before issuing any Chat/Embed/Stream calls.
- Verify SurrealDB is reachable (URL/provider config) so Connect succeeds.
- 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
- Always check the error returned by Connect before using query methods.
- Centralize client construction in an init function that fails fast.
- Reconnect on lifecycle events (close, reset) instead of reusing stale clients.
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
- FTP client is not initialized
- failed to connect to SurrealDB: no valid database instance
- %w: creating index: %w
- %w: deleting index: %w
- %w: executing bulk: %w
AI-assisted analysis of gofr-dev/gofr@187eb24962 (2026-09-01).
Data as JSON: /api/errors/a0cc9008321f0d2e.
Report an issue: GitHub.