prestodb/presto · error · UnsupportedOperationException
This connector does not support row-level delete
Error message
This connector does not support row-level delete
What it means
UpdatablePageSource declares default methods for row-level DELETE; the default implementation throws UnsupportedOperationException("This connector does not support row-level delete"). Connectors that cannot delete rows inherit this default and fail at runtime when the engine issues DELETE against their table.
Source
Thrown at presto-spi/src/main/java/com/facebook/presto/spi/UpdatablePageSource.java:29
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.spi;
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
- Remove the DELETE statement or restrict it to tables on connectors that support row deletes
- Implement deleteRows in your custom connector's UpdatablePageSource and declare update/delete capabilities in metadata (ConnectorMetadata.deleteTable/applyDelete)
- Filter DELETE statements in the query layer before they reach the unsupported connector
Example fix
// before
class MyPageSource implements UpdatablePageSource { /* deleteRows not overridden */ }
// after
@Override
public void deleteRows(Block rowIds) {
myStore.deleteRows(rowIds);
} Defensive patterns
Strategy: try-catch
Try / catch
try { pageSource.deleteRows(rowIds); } catch (UnsupportedOperationException e) { /* connector lacks row-level delete; fall back to full-table rewrite or fail gracefully */ } Prevention
- Check connector update/delete capability before issuing DELETE statements
- Implement deleteRows in custom UpdatablePageSource implementations
- Document DELETE support per catalog for users
When it happens
Trigger: Executing DELETE FROM <table> [WHERE ...] against a connector whose ConnectorPageSourceFactory produces a page source that does not override deleteRows (and whose connector advertises or is assumed to support updates).
Common situations: Running DELETE on a connector without row-level delete support (e.g. base JDBC connector variant or custom connector); connector metadata reports supportsReportingWrittenBytes-style update capability but the page source wasn't implemented; upgrading a connector and relying on capabilities not implemented.
Related errors
- This connector does not support row update
- 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/888caa626c85d71d.
Report an issue: GitHub.