{"record":{"id":"50a0702ca00ec55c","repo":"prestodb/presto","slug":"not-supported-50a070","errorCode":"NOT_SUPPORTED","errorMessage":"'%s' is a materialized view, and set column default is not supported","messagePattern":"'(.+?)' is a materialized view, and set column default is not supported","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/SetColumnDefaultTask.java","lineNumber":68,"sourceCode":"        return \"SET COLUMN DEFAULT\";\n    }\n\n    @Override\n    public ListenableFuture<?> execute(SetColumnDefault statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)\n    {\n        QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTable(), metadata);\n        Optional<TableHandle> tableHandleOptional = metadata.getMetadataResolver(session).getTableHandle(tableName);\n        if (!tableHandleOptional.isPresent()) {\n            if (!statement.isTableExists()) {\n                throw new SemanticException(MISSING_TABLE, statement, \"Table '%s' does not exist\", tableName);\n            }\n            return immediateFuture(null);\n        }\n\n        Optional<MaterializedViewDefinition> optionalMaterializedView = metadata.getMetadataResolver(session).getMaterializedView(tableName);\n        if (optionalMaterializedView.isPresent()) {\n            if (!statement.isTableExists()) {\n                throw new SemanticException(NOT_SUPPORTED, statement, \"'%s' is a materialized view, and set column default is not supported\", tableName);\n            }\n            return immediateFuture(null);\n        }\n\n        TableHandle tableHandle = tableHandleOptional.get();\n        String columnName = metadata.normalizeIdentifier(session, tableName.getCatalogName(), statement.getColumn().getValue());\n\n        accessControl.checkCanAlterColumn(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), tableName);\n\n        Map<String, ColumnHandle> columnHandles = metadata.getColumnHandles(session, tableHandle);\n        ColumnHandle columnHandle = columnHandles.get(columnName);\n        if (columnHandle == null) {\n            throw new SemanticException(MISSING_COLUMN, statement, \"Column '%s' does not exist\", columnName);\n        }\n\n        ColumnMetadata columnMetadata = metadata.getColumnMetadata(session, tableHandle, columnHandle);\n        if (columnMetadata.isHidden()) {\n            throw new SemanticException(NOT_SUPPORTED, statement, \"Cannot set default on hidden column\");","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/SetColumnDefaultTask.java#L50-L86","documentation":"Set column default is only supported on real tables. If the resolved name refers to a materialized view and the statement did not opt into IF EXISTS behavior, Presto rejects it with NOT_SUPPORTED rather than silently applying the change to a non-table object.","triggerScenarios":"ALTER TABLE <mv name> ... SET DEFAULT where metadata.getMetadataResolver(session).getMaterializedView(tableName) returns a definition and statement.isTableExists() is false.","commonSituations":"Assuming a materialized view behaves like a table for DDL; the object was converted from a table to a materialized view since the script was written; name collision between a table and a view in different schemas.","solutions":["Run the SET DEFAULT on the underlying base table instead of the materialized view","Drop and recreate the materialized view with the desired default on its base table","Add IF EXISTS if the statement should silently skip non-table objects"],"exampleFix":"// before\nALTER TABLE hive.default.mv_sales ALTER COLUMN region SET DEFAULT 'us';\n// after\nALTER TABLE hive.default.base_sales ALTER COLUMN region SET DEFAULT 'us';","handlingStrategy":"validation","validationCode":"QualifiedObjectName name = createQualifiedObjectName(session, stmt, table, metadata);\nif (metadata.getMetadataResolver(session).getMaterializedView(name).isPresent()) {\n    throw new IllegalArgumentException(\"Cannot SET DEFAULT on materialized view: \" + name);\n}","typeGuard":null,"tryCatchPattern":"try {\n    return task.execute(stmt, ...);\n} catch (SemanticException e) {\n    if (e.getCode() == SemanticErrorCode.NOT_SUPPORTED) {\n        // redirect to the base table or skip\n    } else {\n        throw e;\n    }\n}","preventionTips":["Check whether the target is a materialized view before column-level DDL","Maintain DDL scripts against base tables, not materialized views","Watch for tables replaced by materialized views during refactors"],"tags":["sql","materialized-view","not-supported","ddl"],"backgroundTag":"operation-not-supported-on-view","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}