{"record":{"id":"d834a3da288a5ae7","repo":"prestodb/presto","slug":"not-supported-d834a3","errorCode":"NOT_SUPPORTED","errorMessage":"ALTER MATERIALIZED VIEW ... SET PROPERTIES is not supported when legacy_materialized_views=true","messagePattern":"ALTER MATERIALIZED VIEW \\.\\.\\. SET PROPERTIES is not supported when legacy_materialized_views=true","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/SetPropertiesTask.java","lineNumber":71,"sourceCode":"    @Override\n    public ListenableFuture<?> execute(SetProperties statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)\n    {\n        QualifiedObjectName tableName = MetadataUtil.createQualifiedObjectName(session, statement, statement.getTableName(), metadata);\n        Map<String, Expression> sqlProperties = mapFromProperties(statement.getProperties());\n\n        if (statement.getType() == TABLE) {\n            Map<String, Object> properties = metadata.getTablePropertyManager().getUserSpecifiedProperties(\n                    getConnectorIdOrThrow(session, metadata, tableName.getCatalogName()),\n                    tableName.getCatalogName(),\n                    sqlProperties,\n                    session,\n                    metadata,\n                    parameterExtractor(statement, parameters)).build();\n            setTableProperties(statement, tableName, metadata, accessControl, session, properties);\n        }\n        else if (statement.getType() == MATERIALIZED_VIEW) {\n            if (SystemSessionProperties.isLegacyMaterializedViews(session)) {\n                throw new PrestoException(NOT_SUPPORTED, \"ALTER MATERIALIZED VIEW ... SET PROPERTIES is not supported when legacy_materialized_views=true\");\n            }\n            Map<String, Object> properties = metadata.getMaterializedViewPropertyManager().getUserSpecifiedProperties(\n                    getConnectorIdOrThrow(session, metadata, tableName.getCatalogName()),\n                    tableName.getCatalogName(),\n                    sqlProperties,\n                    session,\n                    metadata,\n                    parameterExtractor(statement, parameters)).build();\n            setMaterializedViewProperties(statement, tableName, metadata, accessControl, session, properties);\n        }\n        else {\n            throw new PrestoException(NOT_SUPPORTED, format(\"Unsupported target type: %s\", statement.getType()));\n        }\n\n        return immediateFuture(null);\n    }\n\n    private void setTableProperties(SetProperties statement, QualifiedObjectName tableName, Metadata metadata, AccessControl accessControl, Session session, Map<String, Object> properties)","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/SetPropertiesTask.java#L53-L89","documentation":"This PrestoException(NOT_SUPPORTED) guards ALTER MATERIALIZED VIEW ... SET PROPERTIES when the session enables legacy materialized view semantics (legacy_materialized_views=true). Legacy materialized views do not support user-tunable properties, so the operation is refused. It is a feature-availability check, not a syntax or permission error.","triggerScenarios":"Running ALTER MATERIALIZED VIEW ... SET PROPERTIES ... while the session property legacy_materialized_views is set to true.","commonSituations":"Environments migrated from older Presto versions where legacy_materialized_views is enabled in config or at the session/catalog level; DBAs copying modern DDL scripts into a legacy-configured cluster.","solutions":["Disable the legacy flag for the session: SET SESSION legacy_materialized_views = false; then re-run the ALTER.","Remove legacy_materialized_views=true from the cluster/catalog configuration if legacy semantics are no longer needed.","Recreate the materialized view with the desired properties instead of altering it."],"exampleFix":"-- before\nALTER MATERIALIZED VIEW mv SET PROPERTIES partitioned_by = ARRAY['day']\n-- after\nSET SESSION legacy_materialized_views = false;\nALTER MATERIALIZED VIEW mv SET PROPERTIES partitioned_by = ARRAY['day']","handlingStrategy":"try-catch","validationCode":"const rows = await run(\"SHOW SESSION LIKE 'legacy_materialized_views'\");\nif (rows.length && rows[0].Value === 'true') {\n  await run(\"SET SESSION legacy_materialized_views = false\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  await run(\"ALTER MATERIALIZED VIEW mv SET PROPERTIES ...\");\n} catch (e) {\n  if (e.message.includes(\"legacy_materialized_views\")) {\n    await run(\"SET SESSION legacy_materialized_views = false\");\n    await run(\"ALTER MATERIALIZED VIEW mv SET PROPERTIES ...\");\n  } else throw e;\n}","preventionTips":["Set legacy_materialized_views=false in cluster config once legacy views are migrated.","Document the flag in team runbooks for materialized-view maintenance.","Check SHOW SESSION before running materialized-view DDL.","Prefer recreating materialized views over altering when in legacy mode."],"tags":["sql","ddl","presto","materialized-view","not-supported"],"backgroundTag":"feature-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"}