{"record":{"id":"84f488573f919a9f","repo":"googleapis/mcp-toolbox","slug":"unsupported-databaseversion-q-expected-a-value-s","errorCode":null,"errorMessage":"unsupported DatabaseVersion %q: expected a value starting with POSTGRES, MYSQL, or SQLSERVER","messagePattern":"unsupported DatabaseVersion %q: expected a value starting with POSTGRES, MYSQL, or SQLSERVER","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/util/cloudsqlconnect/types.go","lineNumber":397,"sourceCode":"}\n\n// ParseDatabaseTypeStrict is like ParseDatabaseType but returns an error\n// instead of silently defaulting when the DatabaseVersion prefix is not one\n// of the engines this package supports. Use it when auto-detecting the\n// engine from a live sqladmin response so a new Cloud SQL engine (or a\n// malformed value) surfaces a clear diagnostic instead of producing wrong\n// output.\nfunc ParseDatabaseTypeStrict(version string) (DatabaseType, error) {\n\tupper := strings.ToUpper(version)\n\tswitch {\n\tcase strings.HasPrefix(upper, \"POSTGRES\"):\n\t\treturn PostgreSQL, nil\n\tcase strings.HasPrefix(upper, \"MYSQL\"):\n\t\treturn MySQL, nil\n\tcase strings.HasPrefix(upper, \"SQLSERVER\"):\n\t\treturn SQLServer, nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unsupported DatabaseVersion %q: expected a value starting with POSTGRES, MYSQL, or SQLSERVER\", version)\n\t}\n}\n","sourceCodeStart":379,"sourceCodeEnd":400,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/util/cloudsqlconnect/types.go#L379-L400","documentation":"The DatabaseVersion parser in internal/util/cloudsqlconnect/types.go maps a Cloud SQL database version string to an engine type by prefix: POSTGRES_*, MYSQL_*, SQLSERVER_*. If the uppercased version string starts with none of these prefixes, it returns this error because the engine family cannot be determined.","triggerScenarios":"Passing a version like 'POSTGRES', blank string, a typo ('POSTGRESQL_16', 'MYSQL5_7' without underscore prefix form 'MYSQL_5_7' is fine, but 'MARIADB_10' is not), or an unsupported engine prefix ('SQLSERVER_2019_EXPRESS' works; 'ORACLE_19' does not).","commonSituations":"Using Cloud SQL edition/version strings from other products (AlloyDB, Spanner, MariaDB), passing the full instance 'databaseVersion' field with unexpected casing handled upstream but wrong product, or an empty/unset config field.","solutions":["Supply a version string with one of the required prefixes: POSTGRES_ (e.g. POSTGRES_16), MYSQL_ (e.g. MYSQL_8_0), or SQLSERVER_ (e.g. SQLSERVER_2022_STANDARD)","Check the exact databaseVersion via `gcloud sql instances describe <instance> --format='value(databaseVersion)'` and copy it verbatim","Fix typos like 'POSTGRESQL_16' to 'POSTGRES_16'"],"exampleFix":"// before\nparseDatabaseVersion(\"POSTGRESQL_16\")\n// after\nparseDatabaseVersion(\"POSTGRES_16\")","handlingStrategy":"validation","validationCode":"upper := strings.ToUpper(version)\nif !strings.HasPrefix(upper, \"POSTGRES\") && !strings.HasPrefix(upper, \"MYSQL\") && !strings.HasPrefix(upper, \"SQLSERVER\") {\n    return fmt.Errorf(\"databaseVersion %q must start with POSTGRES_, MYSQL_, or SQLSERVER_\", version)\n}","typeGuard":"func isKnownDatabaseVersion(v string) bool {\n    u := strings.ToUpper(v)\n    return strings.HasPrefix(u, \"POSTGRES\") || strings.HasPrefix(u, \"MYSQL\") || strings.HasPrefix(u, \"SQLSERVER\")\n}","tryCatchPattern":"dbType, err := parseDatabaseVersion(version)\nif err != nil {\n    return fmt.Errorf(\"%w; check 'gcloud sql instances describe --format=value(databaseVersion)'\", err)\n}","preventionTips":["Copy databaseVersion verbatim from `gcloud sql instances describe`","Use POSTGRES_xxx, not POSTGRESQL_xxx, and never MariaDB/AlloyDB version strings","Default the version from the tool's own engine type rather than free-form user input"],"tags":["cloudsql","validation","configuration"],"backgroundTag":"unsupported-parameter-value","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}