{"record":{"id":"57681d9fd1321552","repo":"prestodb/presto","slug":"missing-schema","errorCode":"MISSING_SCHEMA","errorMessage":"Schema '%s' does not exist","messagePattern":"Schema '(.+?)' does not exist","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/CreateMaterializedViewTask.java","lineNumber":103,"sourceCode":"\n    @Override\n    public String getName()\n    {\n        return \"CREATE MATERIALIZED VIEW\";\n    }\n\n    @Override\n    public ListenableFuture<?> execute(CreateMaterializedView statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)\n    {\n        QualifiedObjectName viewName = createQualifiedObjectName(session, statement, statement.getName(), metadata);\n        MetadataResolver metadataResolver = metadata.getMetadataResolver(session);\n\n        if (!metadataResolver.catalogExists(viewName.getCatalogName())) {\n            throw new SemanticException(MISSING_CATALOG, \"Catalog '%s' does not exist\", viewName.getCatalogName());\n        }\n\n        if (!metadataResolver.schemaExists(viewName.getCatalogSchemaName())) {\n            throw new SemanticException(MISSING_SCHEMA, statement, \"Schema '%s' does not exist\", viewName.getSchemaName());\n        }\n\n        Optional<TableHandle> viewHandle = metadataResolver.getTableHandle(viewName);\n        if (viewHandle.isPresent()) {\n            if (!statement.isNotExists()) {\n                throw new SemanticException(MATERIALIZED_VIEW_ALREADY_EXISTS, statement, \"Materialized view '%s' already exists\", viewName);\n            }\n            return immediateFuture(null);\n        }\n\n        accessControl.checkCanCreateTable(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), viewName);\n        accessControl.checkCanCreateView(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), viewName);\n\n        Map<NodeRef<Parameter>, Expression> parameterLookup = parameterExtractor(statement, parameters);\n        Analyzer analyzer = new Analyzer(session, metadata, sqlParser, accessControl, Optional.empty(), parameters, parameterLookup, warningCollector, query, new ViewDefinitionReferences());\n        Analysis analysis = analyzer.analyzeSemantic(statement, false);\n        checkAccessPermissions(analysis.getAccessControlReferences(), analysis.getViewDefinitionReferences(), query, session.getPreparedStatements(), session.getIdentity(), accessControl, session.getAccessControlContext());\n","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/CreateMaterializedViewTask.java#L85-L121","documentation":"CREATE MATERIALIZED VIEW targets a schema that does not exist in the given catalog. After the catalog check passes, the task verifies metadataResolver.schemaExists(viewName.getCatalogSchemaName()) and throws SemanticException MISSING_SCHEMA when it fails.","triggerScenarios":"CREATE MATERIALIZED VIEW cat.nonexistent_schema.mv AS ...; schema name typo; schema dropped by another job before this statement ran; using a schema name that only exists in another catalog.","commonSituations":"Environment differences (schema exists in dev, missing in prod); case-sensitivity issues with quoted vs unquoted identifiers; automation that assumed CREATE SCHEMA was run earlier; permission masking making the schema invisible.","solutions":["Run CREATE SCHEMA cat.my_schema before creating the materialized view","Fix the schema name typo (SHOW SCHEMAS FROM catalog to list valid ones)","Confirm the schema exists in the target environment/catalog, not just locally","Check identifier casing/quoting if the schema uses mixed case"],"exampleFix":"// before\nCREATE MATERIALIZED VIEW hive.sales.mv_daily AS SELECT ...\n// after\nCREATE SCHEMA IF NOT EXISTS hive.sales;\nCREATE MATERIALIZED VIEW hive.sales.mv_daily AS SELECT ...","handlingStrategy":"validation","validationCode":"// ensure schema exists before creating the MV\nexecute(String.format(\"CREATE SCHEMA IF NOT EXISTS %s.%s\", catalog, schema));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prepend CREATE SCHEMA IF NOT EXISTS to deployment scripts","List schemas (SHOW SCHEMAS FROM catalog) per environment in CI","Beware case-sensitivity: quote mixed-case schema names consistently"],"tags":["schema","missing-resource","materialized-view"],"backgroundTag":"schema-does-not-exist","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"}