prestodb/presto · error · ConfigurationException
Only one of 'case-insensitive-name-matching=true' or 'case-s
Error message
Only one of 'case-insensitive-name-matching=true' or 'case-sensitive-name-matching=true' can be set. These options are mutually exclusive.
What it means
BaseJdbcConfig.validateConfig() (@PostConstruct) enforces that the legacy case-insensitive-name-matching and the newer case-sensitive-name-matching options are not both enabled, since they are mutually exclusive. Both set to true makes the connector configuration invalid at catalog load.
Source
Thrown at presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/BaseJdbcConfig.java:189
public boolean isCaseSensitiveNameMatching()
{
return caseSensitiveNameMatchingEnabled;
}
@Config("case-sensitive-name-matching")
@ConfigDescription("Enable case-sensitive matching of schema, table names across the connector. " +
"When disabled, names are matched case-insensitively using lowercase normalization.")
public BaseJdbcConfig setCaseSensitiveNameMatching(boolean caseSensitiveNameMatchingEnabled)
{
this.caseSensitiveNameMatchingEnabled = caseSensitiveNameMatchingEnabled;
return this;
}
@PostConstruct
public void validateConfig()
{
if (isCaseInsensitiveNameMatching() && isCaseSensitiveNameMatching()) {
throw new ConfigurationException(ImmutableList.of(new Message("Only one of 'case-insensitive-name-matching=true' or 'case-sensitive-name-matching=true' can be set. " +
"These options are mutually exclusive.")));
}
if (connectionUrl == null) {
throw new ConfigurationException(ImmutableList.of(new Message("connection-url is required but was not provided")));
}
}
public int getFetchSize()
{
return fetchSize;
}
@Config("jdbc-fetch-size")
@ConfigDescription("Number of rows to fetch from the database at a time")
public BaseJdbcConfig setFetchSize(int fetchSize)
{
this.fetchSize = fetchSize;View on GitHub (pinned to 55bb57d202)
Solutions
- Remove case-insensitive-name-matching=true (legacy) and keep case-sensitive-name-matching=true, or vice versa
- Review the catalog .properties file for duplicated/legacy name-matching keys after upgrades
- Restart the coordinator/workers after fixing so the catalog reloads
Example fix
// before (catalog properties) case-insensitive-name-matching=true case-sensitive-name-matching=true // after case-sensitive-name-matching=true
Defensive patterns
Strategy: validation
Validate before calling
// Pre-validate catalog properties before deploying
Properties props = loadCatalogProperties(catalogFile);
if (Boolean.parseBoolean(props.getProperty("case-insensitive-name-matching", "false")) &&
Boolean.parseBoolean(props.getProperty("case-sensitive-name-matching", "false"))) {
throw new IllegalArgumentException("case-insensitive and case-sensitive name matching are mutually exclusive");
} Prevention
- Grep catalog properties for both keys after every Presto upgrade
- Remove the deprecated case-insensitive-name-matching key when adopting case-sensitive-name-matching
- Use a config linter/template that forbids both keys in the same file
When it happens
Trigger: Catalog properties file containing both case-insensitive-name-mapping=true and case-sensitive-name-matching=true; the exception is thrown when the config is instantiated/validated at connector startup.
Common situations: Upgrading Presto where the old option was left in the properties file while adding the new one; copying properties between catalogs; combining vendor-provided templates with local overrides.
Related errors
- connection-url is required but was not provided
- JDBC_ERROR
- PERMISSION_DENIED
- JDBC_ERROR
- JDBC driver class not found: {config.getJdbcDriverName()}
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/6bc52e9f9754c095.
Report an issue: GitHub.