{"record":{"id":"9aee0501e5f214fd","repo":"prestodb/presto","slug":"missing-schema-9aee05","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/CreateViewTask.java","lineNumber":101,"sourceCode":"\n    @Override\n    public String explain(CreateView statement, List<Expression> parameters)\n    {\n        return \"CREATE VIEW \" + statement.getName();\n    }\n\n    @Override\n    public ListenableFuture<?> execute(CreateView statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)\n    {\n        QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName(), metadata);\n        MetadataResolver metadataResolver = metadata.getMetadataResolver(session);\n\n        if (!metadataResolver.catalogExists(name.getCatalogName())) {\n            throw new SemanticException(MISSING_CATALOG, \"Catalog '%s' does not exist\", name.getCatalogName());\n        }\n\n        if (!metadataResolver.schemaExists(name.getCatalogSchemaName())) {\n            throw new SemanticException(MISSING_SCHEMA, statement, \"Schema '%s' does not exist\", name.getSchemaName());\n        }\n\n        accessControl.checkCanCreateView(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), name);\n\n        String sql = getFormattedSql(statement.getQuery(), sqlParser, Optional.of(parameters));\n\n        Analysis analysis = analyzeStatement(statement, session, metadata, accessControl, parameters, warningCollector, query);\n\n        List<ViewColumn> columns = analysis.getOutputDescriptor(statement.getQuery())\n                .getVisibleFields().stream()\n                .map(field -> new ViewColumn(field.getName().get(), field.getType()))\n                .collect(toImmutableList());\n\n        List<ColumnMetadata> columnMetadata = columns.stream()\n                .map(column -> ColumnMetadata.builder()\n                        .setName(metadata.normalizeIdentifier(session, name.getCatalogName(), column.getName()))\n                        .setType(column.getType())\n                        .build())","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/CreateViewTask.java#L83-L119","documentation":"CreateViewTask.execute, after confirming the catalog exists, checks metadataResolver.schemaExists for the target catalog.schema. If the schema does not exist, it throws SemanticException(MISSING_SCHEMA). Presto does not auto-create schemas on CREATE VIEW.","triggerScenarios":"Executing CREATE VIEW <catalog>.<schema>.<name> where the catalog exists but <schema> was never created (no prior CREATE SCHEMA).","commonSituations":"New deployment or new environment where schemas were not bootstrapped; typo in schema name; relying on a default schema that does not exist in this catalog; schema dropped by another job.","solutions":["Run CREATE SCHEMA <catalog>.<schema> first, then retry CREATE VIEW.","Verify with SHOW SCHEMAS FROM <catalog> and correct the schema name if it was misspelled.","If using a session-level default schema, explicitly qualify the view name with an existing schema."],"exampleFix":"// before\nCREATE VIEW hive.analytics.daily AS SELECT ...; -- schema missing\n// after\nCREATE SCHEMA IF NOT EXISTS hive.analytics;\nCREATE VIEW hive.analytics.daily AS SELECT ...;","handlingStrategy":"validation","validationCode":"-- Ensure schema exists before CREATE VIEW\nCREATE SCHEMA IF NOT EXISTS hive.analytics;\n-- or check\nSELECT schema_name FROM information_schema.schemata\nWHERE catalog_name = 'hive' AND schema_name = 'analytics';","typeGuard":"function schemaExists(session, cat, schema) {\n  return session.execute('SELECT count(*) FROM information_schema.schemata WHERE catalog_name = ? AND schema_name = ?', [cat, schema]) > 0;\n}","tryCatchPattern":"try {\n  session.execute(createViewSql);\n} catch (e) {\n  if (/Schema '.*' does not exist/.test(e.message)) {\n    session.execute(`CREATE SCHEMA IF NOT EXISTS ${qualifiedSchema}`);\n    return session.execute(createViewSql);\n  }\n  throw e;\n}","preventionTips":["Prefix environment bootstrap with CREATE SCHEMA IF NOT EXISTS for all needed schemas.","Always fully qualify view names (catalog.schema.view); avoid relying on default schemas.","Run SHOW SCHEMAS FROM <catalog> when moving SQL between environments."],"tags":["presto","sql","schema","missing-resource"],"backgroundTag":"schema-not-found","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"}