prestodb/presto · error · UnsupportedOperationException
This connector does not support row update
Error message
This connector does not support row update
What it means
UpdatablePageSource.updateRows has a default implementation that throws UnsupportedOperationException("This connector does not support row update"). Connectors that do not implement row-level UPDATE inherit this default, and any UPDATE statement routed to them fails at runtime.
Source
Thrown at presto-spi/src/main/java/com/facebook/presto/spi/UpdatablePageSource.java:34
import com.facebook.presto.common.Page;
import com.facebook.presto.common.block.Block;
import io.airlift.slice.Slice;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public interface UpdatablePageSource
extends ConnectorPageSource
{
default void deleteRows(Block rowIds)
{
throw new UnsupportedOperationException("This connector does not support row-level delete");
}
default void updateRows(Page page, List<Integer> columnValueAndRowIdChannels)
{
throw new UnsupportedOperationException("This connector does not support row update");
}
CompletableFuture<Collection<Slice>> finish();
default void abort() {}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Rewrite as INSERT + DELETE within a transaction or materialize the change another way
- Implement updateRows in the connector's UpdatablePageSource and expose update capability from ConnectorMetadata.applyUpdate
- Route the UPDATE to a storage system that supports in-place updates
Example fix
// before
@Override
public void updateRows(Page page, List<Integer> channels) {
throw new UnsupportedOperationException("This connector does not support row update");
}
// after
@Override
public void updateRows(Page page, List<Integer> channels) {
myStore.updateRows(page, channels);
} Defensive patterns
Strategy: try-catch
Try / catch
try { pageSource.updateRows(page, channels); } catch (UnsupportedOperationException e) { /* rewrite as delete+insert or surface unsupported error to user */ } Prevention
- Verify ConnectorMetadata.applyUpdate support before planning UPDATE queries
- Implement both deleteRows and updateRows together in custom connectors
- Prefer copy-on-write strategies for connectors without in-place updates
When it happens
Trigger: Executing UPDATE <table> SET ... against a connector whose UpdatablePageSource does not override updateRows.
Common situations: UPDATE statements against read-mostly connectors; custom connector implemented deleteRows but not updateRows; engine capability detection (applyUpdate returning a handle) inconsistent with page source implementation.
Related errors
- This connector does not support row-level delete
- deleteRows called on EmptySplitPageSource
- updateRows called on EmptySplitPageSource
- partition-aware grouped execution requires an implementation
- rewind is not supported in this ConnectorSplitSource
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/221646c17d2244a1.
Report an issue: GitHub.