prestodb/presto · error · PrestoException
UNSUPPORTED_ISOLATION_LEVEL
UNSUPPORTED_ISOLATION_LEVEL
Error message
Connector supported isolation level %s does not meet requested isolation level %s
What it means
IsolationLevel.checkConnectorSupports verifies the connector's advertised isolation level satisfies the transaction's requested level. If it does not (e.g. connector only supports READ_COMMITTED but SERIALIZABLE was requested), it throws UNSUPPORTED_ISOLATION_LEVEL.
Source
Thrown at presto-spi/src/main/java/com/facebook/presto/spi/transaction/IsolationLevel.java:75
this.value = value;
}
@ThriftEnumValue
public int getValue()
{
return value;
}
@Override
public String toString()
{
return name().replace('_', ' ');
}
public static void checkConnectorSupports(IsolationLevel supportedLevel, IsolationLevel requestedLevel)
{
if (!supportedLevel.meetsRequirementOf(requestedLevel)) {
throw new PrestoException(UNSUPPORTED_ISOLATION_LEVEL, format("Connector supported isolation level %s does not meet requested isolation level %s", supportedLevel, requestedLevel));
}
}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Lower the session's transaction isolation level to one the connector supports
- Remove the isolation-level requirement (use auto-commit) if the connector cannot elevate
- Add real transaction support to the connector and declare the higher level
- Check connector documentation for supported isolation levels
Example fix
// before START TRANSACTION ISOLATION LEVEL SERIALIZABLE; // after START TRANSACTION ISOLATION LEVEL READ COMMITTED;
Defensive patterns
Strategy: try-catch
Validate before calling
IsolationLevel supported = connectorMetadata.supportsIsolationLevel(...); if (!supported.meetsRequirementOf(requestedLevel)) { requestedLevel = IsolationLevel.READ_COMMITTED; } Try / catch
try { startTransaction(requestedLevel); } catch (PrestoException e) { if (e.getErrorCode().getCode() == StandardErrorCode.UNSUPPORTED_ISOLATION_LEVEL.toErrorCode().getCode()) { startTransaction(IsolationLevel.READ_COMMITTED); } else { throw e; } } Prevention
- Check connector docs for supported isolation levels before transactions
- Default session isolation to READ_COMMITTED
- Avoid SERIALIZABLE with connectors lacking MVCC support
When it happens
Trigger: Starting/using a transaction whose requested isolation level exceeds what the connector declares in connectorMetadata support calls, e.g. BEGIN ISOLATION LEVEL SERIALIZABLE against a READ_COMMITTED-only connector.
Common situations: Clients specifying SERIALIZABLE/REPEATABLE_READ against connectors (like early Kafka or simple catalog connectors) that only support READ_COMMITTED or READ_UNCOMMITTED.
Related errors
- partitionHandle must be NOT_PARTITIONED
- This connector does not support row-level delete
- This connector does not support row update
- NOT_SUPPORTED
- ARROW_INTERNAL_ERROR
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/8ef2eb45450cd2fb.
Report an issue: GitHub.