{"record":{"id":"bcdce2e708410c64","repo":"temporalio/temporal","slug":"w-unknown-plugin-q-supported-plugins-v","errorCode":null,"errorMessage":"%w: unknown plugin %q, supported plugins: %v","messagePattern":"%w: unknown plugin %q, supported plugins: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/persistence/sql/store.go","lineNumber":79,"sourceCode":"\tplugin, err := getPlugin(cfg.PluginName)\n\tif err != nil {\n\t\treturn res, err\n\t}\n\tdb, err := plugin.CreateDB(dbKind, cfg, r, logger, mh)\n\tif err != nil {\n\t\treturn res, err\n\t}\n\t//revive:disable-next-line:unchecked-type-assertion\n\tres = db.(T)\n\treturn res, err\n}\n\nfunc getPlugin(pluginName string) (sqlplugin.Plugin, error) {\n\tplugin, ok := supportedPlugins[pluginName]\n\tif !ok {\n\t\tkeys := expmaps.Keys(supportedPlugins)\n\t\tslices.Sort(keys)\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"%w: unknown plugin %q, supported plugins: %v\",\n\t\t\tErrPluginNotSupported,\n\t\t\tpluginName,\n\t\t\tkeys,\n\t\t)\n\t}\n\treturn plugin, nil\n}\n\nfunc GetPluginVisibilityQueryConverter(pluginName string) (sqlplugin.VisibilityQueryConverter, error) {\n\tplugin, err := getPlugin(pluginName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn plugin.GetVisibilityQueryConverter(), nil\n}\n","sourceCodeStart":61,"sourceCodeEnd":96,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/persistence/sql/store.go#L61-L96","documentation":"getPlugin looks up a SQL persistence plugin (mysql, postgres, sqlite, etc.) by name in the supportedPlugins registry. When the configured plugin name does not match any registered driver, it returns ErrPluginNotSupported wrapped with the requested name and the sorted list of valid plugin names. This fails fast at store construction rather than producing confusing driver errors later.","triggerScenarios":"Calling createDB or GetPluginVisibilityQueryConverter with a pluginName that is not a key of supportedPlugins, e.g. a config file specifying an unsupported DB type or a typo like 'psql' instead of 'postgres12'.","commonSituations":"Config mistakes (persistence sql plugin name misspelled), deploying a build that lacks a plugin registered via blank import, mixing up visibility-store plugin name with the main store plugin name, upgrading Temporal where plugin names changed.","solutions":["Check the error message's supported plugins list and set persistence.sql.pluginName in config to one of those exact values (e.g. mysql8, postgres12, sqlite).","Verify the plugin driver is registered: ensure the corresponding sql plugin package is imported (blank import) in the binary being run.","Fix typos/case: plugin names are matched exactly via map lookup.","If using a custom driver, register it in supportedPlugins or use the driverName option appropriately."],"exampleFix":"// before\nconfig:\n  persistence:\n    sql:\n      pluginName: psql\n// after\nconfig:\n  persistence:\n    sql:\n      pluginName: postgres12","handlingStrategy":"validation","validationCode":"var supportedPlugins = map[string]sqlplugin.Plugin{\"mysql8\": ..., \"postgres12\": ..., \"sqlite\": ...}\nif _, ok := supportedPlugins[cfg.PluginName]; !ok {\n    return fmt.Errorf(\"plugin %q not supported\", cfg.PluginName)\n}","typeGuard":null,"tryCatchPattern":"if _, err := persistence.GetPluginVisibilityQueryConverter(name); err != nil {\n    if errors.Is(err, persistence.ErrPluginNotSupported) {\n        logger.Fatal(\"bad persistence config\", \"error\", err)\n    }\n    return err\n}","preventionTips":["Copy plugin names exactly from the error's supported list into config.","Blank-import the driver plugin package in your custom server binary.","Validate persistence config at startup before serving traffic."],"tags":["go","persistence","sql","configuration"],"backgroundTag":"unsupported-plugin-name","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}