{"record":{"id":"7d0006e02ce96db2","repo":"prestodb/presto","slug":"not-supported-7d0006","errorCode":"NOT_SUPPORTED","errorMessage":"'%s' is a materialized view, and rename column is not supported","messagePattern":"'(.+?)' is a materialized view, and rename column is not supported","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/RenameColumnTask.java","lineNumber":66,"sourceCode":"        return \"RENAME COLUMN\";\n    }\n\n    @Override\n    public ListenableFuture<?> execute(RenameColumn 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 rename column is not supported\", tableName);\n            }\n            return immediateFuture(null);\n        }\n\n        TableHandle tableHandle = tableHandleOptional.get();\n\n        Identifier sourceName = statement.getSource();\n        String source = metadata.normalizeIdentifier(session, tableName.getCatalogName(), sourceName.getValue());\n        Identifier targetName = statement.getTarget();\n        String target = metadata.normalizeIdentifier(session, tableName.getCatalogName(), targetName.getValue());\n\n        accessControl.checkCanRenameColumn(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), tableName);\n\n        Map<String, ColumnHandle> columnHandles = metadata.getColumnHandles(session, tableHandle);\n        ColumnHandle columnHandle = columnHandles.get(source);\n        if (columnHandle == null) {\n            if (!statement.isColumnExists()) {\n                throw new SemanticException(MISSING_COLUMN, statement, \"Column '%s' does not exist\", source);","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/RenameColumnTask.java#L48-L84","documentation":"SemanticException thrown by RenameColumnTask when the target object resolves to a materialized view rather than a table. Presto does not support renaming columns on materialized views; the statement is rejected as unsupported. With IF EXISTS the task silently no-ops instead.","triggerScenarios":"ALTER TABLE ... RENAME COLUMN issued against a name that metadata.getMaterializedView() resolves to an existing materialized view, and statement.isTableExists() is false.","commonSituations":"User assumes a materialized view is a regular table; a view replaced the table after a deployment; name collision between a table and a materialized view in different contexts.","solutions":["Drop and recreate the materialized view with the desired column names (CREATE MATERIALIZED VIEW with renamed output columns)","Rename the column in the underlying base table, then refresh/recreate the materialized view","Use SHOW CREATE VIEW / system metadata to confirm the object type before altering","Use ALTER TABLE IF EXISTS ... only if you want a silent no-op for materialized views"],"exampleFix":"-- before\nALTER TABLE shop.mv_sales RENAME COLUMN amt TO amount; -- mv_sales is a materialized view\n-- after\nDROP MATERIALIZED VIEW shop.mv_sales;\nCREATE MATERIALIZED VIEW shop.mv_sales AS SELECT ... AS amount, ... ;","handlingStrategy":"validation","validationCode":"ResultSet rs = stmt.executeQuery(\"SELECT table_type FROM information_schema.tables WHERE table_catalog='shop' AND table_name='mv_sales'\");\nif (rs.next() && \"MATERIALIZED VIEW\".equals(rs.getString(\"table_type\"))) {\n    // recreate the materialized view instead of renaming columns\n}","typeGuard":null,"tryCatchPattern":"try {\n    execute(\"ALTER TABLE shop.mv_sales RENAME COLUMN ...\");\n} catch (SemanticException e) {\n    if (e.getCode() == NOT_SUPPORTED) {\n        // fall back to DROP + CREATE MATERIALIZED VIEW with new column names\n    } else throw e;\n}","preventionTips":["Check object type via information_schema.tables.table_type before DDL","Treat materialized views as immutable DDL targets — recreate to change columns","Adopt naming conventions that distinguish views/mvs from tables"],"tags":["presto","ddl","materialized-view","not-supported"],"backgroundTag":"operation-not-supported","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"}