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

  1. Rewrite as INSERT + DELETE within a transaction or materialize the change another way
  2. Implement updateRows in the connector's UpdatablePageSource and expose update capability from ConnectorMetadata.applyUpdate
  3. 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

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


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/221646c17d2244a1. Report an issue: GitHub.