cayleygraph/cayley · error

unsupported sql database

Error message

unsupported sql database: %q

What it means

Init registers and opens a SQL-backed quadstore. The SQL flavor must be one of the keys in the package's `types` map (postgres, mysql, sqlite). If the `typ` string passed in doesn't match any registered flavor, the store refuses to initialize and returns this error before attempting any connection.

Solutions

  1. Check the spelling of the type argument against the supported list (postgres, mysql, sqlite)
  2. Fix the database/type field in the Cayley config or command-line flag to a supported value
  3. Inspect the types map in graph/sql/quadstore.go for the exact registered keys in your version
  4. Register a custom flavor by importing a driver package (e.g. _ "github.com/.../sql/postgres") if it exists

Example fix

// before
err := sql.Init("postgresql", addr, opts)
// after
err := sql.Init("postgres", addr, opts)
Defensive patterns

Strategy: validation

Validate before calling

supported := []string{"postgres", "mysql", "sqlite"}
found := false
for _, s := range supported { if typ == s { found = true } }
if !found { return fmt.Errorf("unsupported sql type %q; supported: %v", typ, supported) }

Prevention

When it happens

Trigger: Calling graph/sql.Init with a backend name not in the types map, e.g. Init("postgresql", ...) when only "postgres" is registered, or a typo like "sqllite".

Common situations: Cayley config files where database: is set to a misspelled or renamed backend name; migrating from another triplestore whose driver names differ (e.g. "cockroach" vs "postgres"); upgrading versions where a flavor was removed.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of cayleygraph/cayley@81dcd7d73e (2026-09-06). Data as JSON: /api/errors/c2b2cc25281102b1. Report an issue: GitHub.

Appendix: source

Thrown at graph/sql/quadstore.go:204

}

var nodeInsertColumns = [][]string{
	{"value"},
	{"value_string", "iri"},
	{"value_string", "bnode"},
	{"value_string"},
	{"value_string", "datatype"},
	{"value_string", "language"},
	{"value_int"},
	{"value_bool"},
	{"value_float"},
	{"value_time"},
}

func Init(typ string, addr string, options graph.Options) error {
	fl, ok := types[typ]
	if !ok {
		return fmt.Errorf("unsupported sql database: %q", typ)
	}
	conn, err := connect(addr, fl.Driver, options)
	if err != nil {
		return err
	}
	defer conn.Close()

	nodesSQL := fl.nodesTable()
	quadsSQL := fl.quadsTable()
	indexes := fl.quadIndexes(options)

	if fl.NoSchemaChangesInTx {
		_, err = conn.Exec(nodesSQL)
		if err != nil {
			err = fl.Error(err)
			clog.Errorf("Cannot create nodes table: %v", err)
			return err
		}

View on GitHub (pinned to 81dcd7d73e)