usememos/memos · critical

unknown db driver

Error message

unknown db driver

What it means

store/db.NewDBDriver switches on profile.Driver and only accepts "sqlite", "mysql", or "postgres". Any other value — including empty string, "postgresql", "mariadb", or differently-cased variants — falls to default and returns "unknown db driver".

Source

Thrown at store/db/db.go:26

	"github.com/usememos/memos/store/db/mysql"
	"github.com/usememos/memos/store/db/postgres"
	"github.com/usememos/memos/store/db/sqlite"
)

// NewDBDriver creates new db driver based on profile.
func NewDBDriver(profile *profile.Profile) (store.Driver, error) {
	var driver store.Driver
	var err error

	switch profile.Driver {
	case "sqlite":
		driver, err = sqlite.NewDB(profile)
	case "mysql":
		driver, err = mysql.NewDB(profile)
	case "postgres":
		driver, err = postgres.NewDB(profile)
	default:
		return nil, errors.New("unknown db driver")
	}
	if err != nil {
		return nil, errors.Wrap(err, "failed to create db driver")
	}
	return driver, nil
}

View on GitHub (pinned to 14d757ce1f)

Solutions

  1. Set the driver to exactly one of: sqlite, mysql, postgres
  2. Check the flag/env wiring (e.g. MEMOS_DRIVER) if you expected a value to be set
  3. Trim whitespace/case-normalize the value before it reaches the profile

Example fix

# before
MEMOS_DRIVER=postgresql MEMOS_DSN=...
# after
MEMOS_DRIVER=postgres MEMOS_DSN=...
Defensive patterns

Strategy: validation

Validate before calling

switch strings.ToLower(strings.TrimSpace(driver)) {
case "sqlite", "mysql", "postgres":
    // ok
default:
    return fmt.Errorf("driver must be sqlite, mysql, or postgres; got %q", driver)
}

Type guard

var supportedDrivers = map[string]bool{"sqlite": true, "mysql": true, "postgres": true}

func isSupportedDriver(d string) bool { return supportedDrivers[d] }

Prevention

When it happens

Trigger: Starting memos with --driver postgresql or DRIVER env set to an unsupported value; typo in the driver flag; profile misconfiguration leaving Driver empty.

Common situations: Users writing "postgresql" out of habit (only "postgres" works); env var name mismatch so the driver flag never gets set; config templating injecting whitespace or quotes around the value.

Related errors


AI-assisted analysis of usememos/memos@14d757ce1f (2026-08-15). Data as JSON: /api/errors/045e5d6a6ecda1ca. Report an issue: GitHub.