googleapis/mcp-toolbox · error

unsupported DatabaseVersion %q: expected a value starting wi

Error message

unsupported DatabaseVersion %q: expected a value starting with POSTGRES, MYSQL, or SQLSERVER

What it means

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.

Source

Thrown at internal/util/cloudsqlconnect/types.go:397

}

// ParseDatabaseTypeStrict is like ParseDatabaseType but returns an error
// instead of silently defaulting when the DatabaseVersion prefix is not one
// of the engines this package supports. Use it when auto-detecting the
// engine from a live sqladmin response so a new Cloud SQL engine (or a
// malformed value) surfaces a clear diagnostic instead of producing wrong
// output.
func ParseDatabaseTypeStrict(version string) (DatabaseType, error) {
	upper := strings.ToUpper(version)
	switch {
	case strings.HasPrefix(upper, "POSTGRES"):
		return PostgreSQL, nil
	case strings.HasPrefix(upper, "MYSQL"):
		return MySQL, nil
	case strings.HasPrefix(upper, "SQLSERVER"):
		return SQLServer, nil
	default:
		return "", fmt.Errorf("unsupported DatabaseVersion %q: expected a value starting with POSTGRES, MYSQL, or SQLSERVER", version)
	}
}

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. 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)
  2. Check the exact databaseVersion via `gcloud sql instances describe <instance> --format='value(databaseVersion)'` and copy it verbatim
  3. Fix typos like 'POSTGRESQL_16' to 'POSTGRES_16'

Example fix

// before
parseDatabaseVersion("POSTGRESQL_16")
// after
parseDatabaseVersion("POSTGRES_16")
Defensive patterns

Strategy: validation

Validate before calling

upper := strings.ToUpper(version)
if !strings.HasPrefix(upper, "POSTGRES") && !strings.HasPrefix(upper, "MYSQL") && !strings.HasPrefix(upper, "SQLSERVER") {
    return fmt.Errorf("databaseVersion %q must start with POSTGRES_, MYSQL_, or SQLSERVER_", version)
}

Type guard

func isKnownDatabaseVersion(v string) bool {
    u := strings.ToUpper(v)
    return strings.HasPrefix(u, "POSTGRES") || strings.HasPrefix(u, "MYSQL") || strings.HasPrefix(u, "SQLSERVER")
}

Try / catch

dbType, err := parseDatabaseVersion(version)
if err != nil {
    return fmt.Errorf("%w; check 'gcloud sql instances describe --format=value(databaseVersion)'", err)
}

Prevention

When it happens

Trigger: 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).

Common situations: 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.

Related errors


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/84f488573f919a9f. Report an issue: GitHub.