{"record":{"id":"1ccc3d5c72733109","repo":"prestodb/presto","slug":"missing-column-1ccc3d","errorCode":"MISSING_COLUMN","errorMessage":"Column '%s' does not exist","messagePattern":"Column '(.+?)' does not exist","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/RenameColumnTask.java","lineNumber":84,"sourceCode":"                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);\n            }\n            return immediateFuture(null);\n        }\n\n        if (columnHandles.containsKey(target)) {\n            throw new SemanticException(COLUMN_ALREADY_EXISTS, statement, \"Column '%s' already exists\", target);\n        }\n\n        if (metadata.getColumnMetadata(session, tableHandle, columnHandle).isHidden()) {\n            throw new SemanticException(NOT_SUPPORTED, statement, \"Cannot rename hidden column\");\n        }\n\n        metadata.renameColumn(session, tableHandle, columnHandle, target);\n\n        return immediateFuture(null);\n    }\n}\n","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/RenameColumnTask.java#L66-L102","documentation":"SemanticException thrown by RenameColumnTask when the source column of a RENAME COLUMN does not exist in the table's column handles. Presto looks up the column by name in metadata.getColumnHandles; a missing entry means there is nothing to rename. With IF EXISTS syntax the task no-ops instead of failing.","triggerScenarios":"ALTER TABLE ... RENAME COLUMN where columnHandles.get(source) is null and statement.isColumnExists() is false. Includes case-sensitivity mismatches and quoted-identifier mistakes.","commonSituations":"Column already renamed by a prior statement; typo or wrong case in column name; column was dropped; script replay against a schema that has drifted.","solutions":["Run DESCRIBE table (or SHOW COLUMNS FROM table) to list exact column names before renaming","Add IF EXISTS: ALTER TABLE IF EXISTS ... RENAME COLUMN IF EXISTS src TO dst if replay-safety matters","Check identifier quoting/case: unquoted identifiers are lowercased in Presto","Confirm the script isn't being re-run after a successful first execution"],"exampleFix":"-- before\nALTER TABLE shop.orders RENAME COLUMN cust_id TO customer_id; -- cust_id already renamed\n-- after\nALTER TABLE shop.orders RENAME COLUMN IF EXISTS cust_id TO customer_id;","handlingStrategy":"validation","validationCode":"ResultSet rs = stmt.executeQuery(\"DESCRIBE shop.orders\");\nSet<String> cols = new HashSet<>();\nwhile (rs.next()) cols.add(rs.getString(\"Column\").toLowerCase());\nif (!cols.contains(\"cust_id\")) { /* skip or abort rename */ }","typeGuard":null,"tryCatchPattern":"try {\n    execute(\"ALTER TABLE shop.orders RENAME COLUMN cust_id TO customer_id\");\n} catch (SemanticException e) {\n    if (e.getCode() == MISSING_COLUMN) { /* already renamed or never existed — skip */ }\n    else throw e;\n}","preventionTips":["Use RENAME COLUMN IF EXISTS in idempotent scripts","Match identifier case exactly (unquoted identifiers are lowercased)","Keep a schema-state record so replays don't re-rename","Run DESCRIBE before every column DDL in migrations"],"tags":["presto","ddl","missing-column","sql"],"backgroundTag":"column-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"}