prestodb/presto · error · SemanticException

NOT_SUPPORTED

NOT_SUPPORTED

Error message

Cannot truncate a materialized view

What it means

SemanticException (NOT_SUPPORTED) from TruncateTableTask.execute: the target name resolves to a materialized view, and truncating a materialized view is not defined; TRUNCATE only applies to base tables.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/TruncateTableTask.java:63

        return "TRUNCATE TABLE";
    }

    @Override
    public ListenableFuture<?> execute(TruncateTable statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)
    {
        MetadataResolver metadataResolver = metadata.getMetadataResolver(session);
        QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTableName(), metadata);

        if (!metadataResolver.catalogExists(tableName.getCatalogName())) {
            throw new SemanticException(MISSING_CATALOG, "Catalog '%s' does not exist", tableName.getCatalogName());
        }

        if (!metadataResolver.schemaExists(tableName.getCatalogSchemaName())) {
            throw new SemanticException(MISSING_SCHEMA, statement, "Schema '%s' does not exist", tableName.getSchemaName());
        }

        if (metadataResolver.isMaterializedView(tableName)) {
            throw new SemanticException(NOT_SUPPORTED, statement, "Cannot truncate a materialized view");
        }

        if (metadataResolver.isView(tableName)) {
            throw new SemanticException(NOT_SUPPORTED, statement, "Cannot truncate a view");
        }

        Optional<TableHandle> tableHandle = metadata.getMetadataResolver(session).getTableHandle(tableName);
        if (!tableHandle.isPresent()) {
            throw new SemanticException(MISSING_TABLE, statement, "Table '%s' does not exist", tableName);
        }

        accessControl.checkCanTruncateTable(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), tableName);

        metadata.truncateTable(session, tableHandle.get());

        return immediateFuture(null);
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Truncate the base tables that back the materialized view, then REFRESH the view
  2. Drop and recreate the materialized view if the goal is to empty it
  3. Target the base table directly instead of the materialized view
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/TruncateTableTask.java:63 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class

Background: Presto NOT_SUPPORTED error: what "not supported" means and how to fix it — this error's family across 3 libraries.


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