{"record":{"id":"d78569d960fb6d2b","repo":"apache/seatunnel","slug":"config-validation-failed-d78569","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/kingbase/KingbaseDialect.java","lineNumber":141,"sourceCode":"\n        return \"\\\"\" + getFieldIde(identifier, fieldIde) + \"\\\"\";\n    }\n\n    @Override\n    public String quoteDatabaseIdentifier(String identifier) {\n        return \"\\\"\" + identifier + \"\\\"\";\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":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/KingbaseDialect.java#L123-L159","documentation":"KingbaseDialect.validateTableOptions rejects table_options keys that the Kingbase catalog cannot translate into CREATE TABLE DDL. Only a fixed set of keys (e.g. fillfactor, tablespace) is supported; anything else fails fast with CONFIG_VALIDATION_FAILED before the DDL is generated.","triggerScenarios":"Sink config with a Kingbase catalog that defines table_options containing a key not in KingbaseDialect.SUPPORTED_TABLE_OPTIONS; validateTableOptions is called when the catalog builds the create-table SQL.","commonSituations":"Typos like 'fill_factore' or 'table_space'; copying MySQL table options (engine, charset) into a Kingbase config; case/key naming drift.","solutions":["Remove the unsupported key from table_options.","Use only supported keys, currently tablespace and fillfactor, spelled exactly as listed in the error message.","If the option is genuinely needed, extend SUPPORTED_TABLE_OPTIONS and the DDL generation in KingbaseDialect/KingbaseCatalog."],"exampleFix":"// before\ntable_options = {\n  engine = \"InnoDB\"\n}\n// after\ntable_options = {\n  fillfactor = \"80\"\n  tablespace = \"my_ts\"\n}","handlingStrategy":"validation","validationCode":"Set<String> allowed = Set.of(\"fillfactor\", \"tablespace\");\nif (!tableOptions.keySet().stream().allMatch(allowed::contains)) {\n  throw new IllegalArgumentException(\"table_options keys must be within \" + allowed);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep table_options limited to fillfactor and tablespace for Kingbase.","Avoid copying MySQL/Oracle option keys into Kingbase configs.","Lint configs against a per-dialect allowed-key list in CI."],"tags":["jdbc","kingbase","config-validation","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"}