{"record":{"id":"045e5d6a6ecda1ca","repo":"usememos/memos","slug":"unknown-db-driver","errorCode":null,"errorMessage":"unknown db driver","messagePattern":"unknown db driver","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"store/db/db.go","lineNumber":26,"sourceCode":"\t\"github.com/usememos/memos/store/db/mysql\"\n\t\"github.com/usememos/memos/store/db/postgres\"\n\t\"github.com/usememos/memos/store/db/sqlite\"\n)\n\n// NewDBDriver creates new db driver based on profile.\nfunc NewDBDriver(profile *profile.Profile) (store.Driver, error) {\n\tvar driver store.Driver\n\tvar err error\n\n\tswitch profile.Driver {\n\tcase \"sqlite\":\n\t\tdriver, err = sqlite.NewDB(profile)\n\tcase \"mysql\":\n\t\tdriver, err = mysql.NewDB(profile)\n\tcase \"postgres\":\n\t\tdriver, err = postgres.NewDB(profile)\n\tdefault:\n\t\treturn nil, errors.New(\"unknown db driver\")\n\t}\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to create db driver\")\n\t}\n\treturn driver, nil\n}\n","sourceCodeStart":8,"sourceCodeEnd":33,"githubUrl":"https://github.com/usememos/memos/blob/14d757ce1fb31c78590f374bc042f8dbedbc20d7/store/db/db.go#L8-L33","documentation":"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\".","triggerScenarios":"Starting memos with --driver postgresql or DRIVER env set to an unsupported value; typo in the driver flag; profile misconfiguration leaving Driver empty.","commonSituations":"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.","solutions":["Set the driver to exactly one of: sqlite, mysql, postgres","Check the flag/env wiring (e.g. MEMOS_DRIVER) if you expected a value to be set","Trim whitespace/case-normalize the value before it reaches the profile"],"exampleFix":"# before\nMEMOS_DRIVER=postgresql MEMOS_DSN=...\n# after\nMEMOS_DRIVER=postgres MEMOS_DSN=...","handlingStrategy":"validation","validationCode":"switch strings.ToLower(strings.TrimSpace(driver)) {\ncase \"sqlite\", \"mysql\", \"postgres\":\n    // ok\ndefault:\n    return fmt.Errorf(\"driver must be sqlite, mysql, or postgres; got %q\", driver)\n}","typeGuard":"var supportedDrivers = map[string]bool{\"sqlite\": true, \"mysql\": true, \"postgres\": true}\n\nfunc isSupportedDriver(d string) bool { return supportedDrivers[d] }","tryCatchPattern":null,"preventionTips":["Remember \"postgresql\" is invalid — use \"postgres\"","Fail fast at config load with the allowed values listed in the error message"],"tags":["startup","database","driver","configuration"],"backgroundTag":null,"analyzedSha":"14d757ce1fb31c78590f374bc042f8dbedbc20d7","analyzedAt":"2026-08-15T09:27:36.538Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}