apache/superset · error · InvalidParametersError
errors
Error message
errors
What it means
InvalidParametersError raised inside ValidateDatabaseParametersCommand.run for engines in BYPASS_VALIDATION_ENGINES (bigquery, datastore, snowflake). These engines skip parameter-schema validation (they are validated at create time via other flows), but the command still collects database_name uniqueness errors (_get_database_name_error) and SSH tunnel field errors (_get_ssh_tunnel_errors); if any exist, it raises InvalidParametersError(errors) after logging a 'validation_error' event. The payload is a list of SupersetError objects describing each field problem.
Source
Thrown at superset/commands/database/validate.py:63
self._model: Optional[Database] = None
def run(self) -> None: # noqa: C901
self.validate()
engine = self._properties["engine"]
driver = self._properties.get("driver")
if engine in BYPASS_VALIDATION_ENGINES:
# Skip engines that are only validated onCreate, but still surface
# database_name uniqueness and SSH tunnel field errors so the
# progressive validation flow stays consistent across engines.
errors: list[SupersetError] = []
if database_name_error := self._get_database_name_error():
errors.append(database_name_error)
errors.extend(self._get_ssh_tunnel_errors())
if errors:
event_logger.log_with_context(action="validation_error", engine=engine)
raise InvalidParametersError(errors)
return
engine_spec = get_engine_spec(engine, driver)
if not hasattr(engine_spec, "parameters_schema"):
raise InvalidEngineError(
SupersetError(
message=__(
'Engine "%(engine)s" cannot be configured through parameters.',
engine=engine,
),
error_type=SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
level=ErrorLevel.ERROR,
),
)
# perform initial validation (host, port, database, username)
errors = engine_spec.validate_parameters(self._properties) # type: ignore
View on GitHub (pinned to f4587218dd)
Solutions
- Read each SupersetError in the response payload — it names the offending field (database_name or ssh_tunnel)
- Choose a unique database name, or edit the existing connection instead of creating a new one
- Complete/correct all SSH tunnel fields (server address, port, username, credentials) or clear the tunnel if unused
- Re-submit validation; only the listed fields block progress for bypass engines
Example fix
# before: {"engine": "snowflake", "database_name": "sales"} # name already taken
# after: {"engine": "snowflake", "database_name": "sales_prod"} Defensive patterns
Strategy: try-catch
Validate before calling
from superset.daos.database import DatabaseDAO
def name_available(database_name: str) -> bool:
return DatabaseDAO.get_database_by_name(database_name) is None Try / catch
from superset.commands.database.exceptions import InvalidParametersError
try:
ValidateDatabaseParametersCommand(properties).run()
except InvalidParametersError as ex:
# ex.errors is a list of SupersetError; map each to its form field
for e in ex.errors: mark_field(e) Prevention
- Check database_name uniqueness before submitting for bypass engines
- Complete or clear SSH tunnel fields entirely
- Handle the SupersetError list, not a single message
When it happens
Trigger: Creating/editing a BigQuery, Datastore, or Snowflake connection in the database modal with a database_name that already exists, or with malformed/missing SSH tunnel fields (bad host, port, credentials format); the progressive-validation endpoint fires this before the connection test stage.
Common situations: Duplicate friendly names for Snowflake databases across teams; SSH tunnel JSON pasted incomplete; UI field-level validation bypassed by API calls (POST to the validate endpoint) with only engine + name supplied.
Related errors
- Engine "%(engine)s" cannot be configured through parameters.
- Unsupported whisker type: ${whiskerOptions}
- Found invalid orderby options
- Unknown Error
- Please provide both time bounds (Since and Until)
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/57acb271aae2a154.
Report an issue: GitHub.