{"record":{"id":"d7785828f3674f57","repo":"apache/seatunnel","slug":"seatunnelapierrorcode-config-validation-failed-d77858","errorCode":"SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED","errorMessage":"Unsupported JDBC table_options for dialect '${dialectName}': ${unsupportedOptions}. Supported keys: ${supportedOptions}","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/psql/PostgresDialect.java","lineNumber":492,"sourceCode":"    }\n\n    public String convertType(String columnName, String columnType) {\n        if (PostgresTypeConverter.PG_UUID.equals(columnType)) {\n            return columnName + \"::text\";\n        }\n        return columnName;\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":474,"sourceCodeEnd":510,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/psql/PostgresDialect.java#L474-L510","documentation":"This error is thrown by the PostgreSQL JDBC dialect's validateTableOptions when a user supplies table_options keys that are not in the dialect's SUPPORTED_TABLE_OPTIONS set. It fails fast at config validation time so unsupported options never reach the generated DDL. The message lists the offending keys and all keys the dialect supports.","triggerScenarios":"Calling validateTableOptions (directly in tests or via catalog table creation) with a table_options map containing any key outside SUPPORTED_TABLE_OPTIONS for the postgres dialect.","commonSituations":"Copy-pasting table options from MySQL or other dialect docs (e.g. ENGINE=InnoDB) into a Postgres connector config; typos in supported keys like 'fillfactor' or 'tablespace'; options left over from a dialect migration.","solutions":["Remove the unsupported keys from table_options, keeping only keys listed in the error's 'Supported keys'","Fix typos in option key names (e.g. 'fill_factor' -> 'fillfactor')","Check the PostgresDialect/PostgresCatalog source for the current SUPPORTED_TABLE_OPTIONS list for your SeaTunnel version","If the option is genuinely needed, upgrade SeaTunnel to a version that supports it or file/patch an upstream feature request"],"exampleFix":"// before\ntable_options = {fillfactor=80, engine=InnoDB}\n// after\ntable_options = {fillfactor=80}","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"fillfactor\",\"tablespace\");\nSet<String> bad = new LinkedHashSet<>(tableOptions.keySet());\nbad.removeAll(supported);\nif (!bad.isEmpty()) throw new IllegalArgumentException(\"Unsupported table_options: \" + bad);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use keys printed in the error's 'Supported keys' list","Diff your table_options against SUPPORTED_TABLE_OPTIONS when upgrading SeaTunnel","Avoid copying table options between database dialects"],"tags":["jdbc","postgres","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"}