{"record":{"id":"71ba383ba11e7558","repo":"apache/seatunnel","slug":"config-validation-failed-71ba38","errorCode":"CONFIG_VALIDATION_FAILED","errorMessage":"Unsupported JDBC table_options for dialect '%s': %s. Supported keys: %s","messagePattern":"Unsupported JDBC table_options for dialect '(.+?)': (.+?)\\. Supported keys: (.+?)","errorType":"validation","errorClass":"JdbcConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbDialect.java","lineNumber":418,"sourceCode":"                        + column\n                        + \"'\";\n        try (Statement statement = connection.createStatement()) {\n            ResultSet rs = statement.executeQuery(selectColumnSQL);\n            rs.next();\n            return rs.getString(\"NULLABLE\").equals(\"Y\");\n        }\n    }\n\n    @Override\n    public void validateTableOptions(Map<String, String> tableOptions) {\n        if (tableOptions == null || tableOptions.isEmpty()) {\n            return;\n        }\n\n        Set<String> unsupportedOptions = new LinkedHashSet<>(tableOptions.keySet());\n        unsupportedOptions.removeAll(SUPPORTED_TABLE_OPTIONS);\n        if (!unsupportedOptions.isEmpty()) {\n            throw new JdbcConnectorException(\n                    SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,\n                    String.format(\n                            \"Unsupported JDBC table_options for dialect '%s': %s. Supported keys: %s\",\n                            dialectName(),\n                            String.join(\", \", unsupportedOptions),\n                            String.join(\", \", SUPPORTED_TABLE_OPTIONS)));\n        }\n\n        for (Map.Entry<String, String> entry : tableOptions.entrySet()) {\n            String key = entry.getKey();\n            String value = entry.getValue();\n            if (StringUtils.isBlank(value)) {\n                throw new JdbcConnectorException(\n                        SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,\n                        String.format(\n                                \"Invalid JDBC table_options for dialect '%s': key '%s' must not be blank\",\n                                dialectName(), key));\n            }","sourceCodeStart":400,"sourceCodeEnd":436,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbDialect.java#L400-L436","documentation":"Thrown by DmdbDialect.validateTableOptions when the user supplies table_options containing keys that the DM (Dameng) dialect does not support. The message lists the unsupported keys and the set of supported keys (e.g. tablespace, fillfactor).","triggerScenarios":"Configuring a JDBC sink with plugin_name DM/dmdb and a table_options map containing any key outside SUPPORTED_TABLE_OPTIONS, such as engine, charset, or typo'd keys like 'tablespace ' or 'fillefactor'.","commonSituations":"Copying table_options from MySQL/PostgreSQL connector configs; typos in supported keys; upgrading SeaTunnel and relying on options a previous custom build accepted.","solutions":["Remove all unsupported keys from table_options, keeping only listed supported keys","Fix typos so keys exactly match the supported set (tablespace, fillfactor)","Consult DmdbDialect.SUPPORTED_TABLE_OPTIONS for the authoritative key list","Move dialect-specific storage settings into native DDL pre-created tables if needed"],"exampleFix":"// before\nsink {\n  Jdbc {\n    table_options {\n      tablespace = \"TS1\"\n      engine = \"InnoDB\"   // unsupported\n    }\n  }\n}\n// after\nsink {\n  Jdbc {\n    table_options {\n      tablespace = \"TS1\"\n    }\n  }\n}","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"tablespace\", \"fillfactor\"); // mirror DmdbDialect.SUPPORTED_TABLE_OPTIONS\nMap<String,String> tableOptions = ...;\nSet<String> unsupported = new LinkedHashSet<>(tableOptions.keySet());\nunsupported.removeAll(supported);\nif (!unsupported.isEmpty()) throw new IllegalArgumentException(\"Unsupported table_options: \" + unsupported);","typeGuard":null,"tryCatchPattern":"try {\n    sinkOptions.setTableOptions(userOptions);\n} catch (JdbcConnectorException e) {\n    if (e.getCode() == SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED\n            && e.getMessage().contains(\"Unsupported JDBC table_options\")) {\n        // strip/fix the listed keys listed in e.getMessage() and retry config build\n    }\n}","preventionTips":["Only use keys listed in the error message's 'Supported keys' section","Do not copy table_options verbatim from MySQL/PostgreSQL connector configs","Check DmdbDialect.SUPPORTED_TABLE_OPTIONS in the source for the authoritative list","Watch for typos and trailing whitespace in option keys"],"tags":["jdbc","config-validation","dameng","table-options"],"backgroundTag":"unsupported-config-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}