{"record":{"id":"07eab25d530f7c78","repo":"prestodb/presto","slug":"column-already-exists","errorCode":"COLUMN_ALREADY_EXISTS","errorMessage":"Column '%s' already exists","messagePattern":"Column '(.+?)' already exists","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/AddColumnTask.java","lineNumber":108,"sourceCode":"\n        accessControl.checkCanAddColumns(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), tableName);\n\n        Map<String, ColumnHandle> columnHandles = metadata.getColumnHandles(session, tableHandle.get());\n\n        ColumnDefinition element = statement.getColumn();\n        Type type;\n        try {\n            type = metadata.getType(parseTypeSignature(element.getType()));\n        }\n        catch (IllegalArgumentException | UnknownTypeException e) {\n            throw new SemanticException(TYPE_MISMATCH, element, \"Unknown type '%s' for column '%s'\", element.getType(), element.getName());\n        }\n        if (type.equals(UNKNOWN)) {\n            throw new SemanticException(TYPE_MISMATCH, element, \"Unknown type '%s' for column '%s'\", element.getType(), element.getName());\n        }\n        if (columnHandles.containsKey(element.getName().getValueLowerCase())) {\n            if (!statement.isColumnNotExists()) {\n                throw new SemanticException(COLUMN_ALREADY_EXISTS, statement, \"Column '%s' already exists\", element.getName());\n            }\n            return immediateFuture(null);\n        }\n        if (!element.isNullable() && !metadata.getConnectorCapabilities(session, connectorId).contains(NOT_NULL_COLUMN_CONSTRAINT)) {\n            throw new SemanticException(NOT_SUPPORTED, element, \"Catalog '%s' does not support NOT NULL for column '%s'\", connectorId.getCatalogName(), element.getName());\n        }\n\n        Map<String, Expression> sqlProperties = mapFromProperties(element.getProperties());\n        Map<String, Object> columnProperties = metadata.getColumnPropertyManager().getProperties(\n                connectorId,\n                tableName.getCatalogName(),\n                sqlProperties,\n                session,\n                metadata,\n                parameterExtractor(statement, parameters));\n\n        Identifier columnIdentifier = element.getName();\n        String name = metadata.normalizeIdentifier(session, tableName.getCatalogName(), columnIdentifier.getValue());","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/AddColumnTask.java#L90-L126","documentation":"During ADD COLUMN processing, the connector's column handles for the target table already contain a column with the name given in the statement's ColumnDefinition. Since columns must be unique within a table, the alteration is rejected as redundant; the duplicated name is formatted into the message.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/AddColumnTask.java:108 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Choose a different column name","Drop the existing column first if replacement is intended"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}