{"record":{"id":"246b7beb87339c7f","repo":"apache/seatunnel","slug":"please-configure-unique-table-path-not-allow-nu","errorCode":null,"errorMessage":"Please configure unique `table_path`, not allow null/duplicate table path: ","messagePattern":"Please configure unique `table_path`, not allow null/duplicate table path: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java","lineNumber":115,"sourceCode":"                    if (tableConfig.getPartitionNumber() == null) {\n                        tableConfig.setPartitionNumber(DEFAULT_PARTITION_NUMBER);\n                    }\n                    tableConfig.setUseSelectCount(\n                            connectorConfig.get(JdbcSourceOptions.USE_SELECT_COUNT));\n                    tableConfig.setSkipAnalyze(connectorConfig.get(JdbcSourceOptions.SKIP_ANALYZE));\n                    if (tableConfig.getUseRegex() == null) {\n                        tableConfig.setUseRegex(connectorConfig.get(JdbcSourceOptions.USE_REGEX));\n                    }\n                });\n\n        if (tableList.size() > 1) {\n            List<String> tableIds =\n                    tableList.stream()\n                            .map(JdbcSourceTableConfig::getTablePath)\n                            .collect(Collectors.toList());\n            Set<String> tableIdSet = new HashSet<>(tableIds);\n            if (tableIdSet.size() < tableList.size() - 1) {\n                throw new IllegalArgumentException(\n                        \"Please configure unique `table_path`, not allow null/duplicate table path: \"\n                                + tableIds);\n            }\n        }\n        return tableList;\n    }\n}\n","sourceCodeStart":97,"sourceCodeEnd":123,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcSourceTableConfig.java#L97-L123","documentation":"JdbcSourceTableConfig.of validates that every table in the source's table_list has a distinct, non-null table_path. It builds a Set of table paths and throws IllegalArgumentException when duplicates/nulls make the set smaller than the list. Duplicate table paths would otherwise cause the same table to be read/split twice.","triggerScenarios":"Calling JdbcSourceTableConfig.of with a table_list where two entries share the same table_path, or where an entry's table_path is null (e.g. table_path key missing or misspelled in config).","commonSituations":"Copy-pasting a table entry in the HOCON/YAML config and forgetting to change table_path, missing the table_path key so the field defaults to null, case differences ignored when intending different tables.","solutions":["Give each entry in table_list a unique table_path, e.g. \"schema_a.table1\" vs \"schema_a.table2\"","Confirm every entry defines table_path (check for typos like table-path or tablename)","Read the message's trailing tableIds list to find which entries are duplicated or null","If you truly need the same table twice, merge the configs or use different queries instead"],"exampleFix":"// before\ntable_list = [\n  {table_path = \"public.users\"},\n  {table_path = \"public.users\"}   // duplicate\n]\n// after\ntable_list = [\n  {table_path = \"public.users\"},\n  {table_path = \"public.orders\"}\n]","handlingStrategy":"validation","validationCode":"Set<String> paths = new HashSet<>();\nfor (Map<String,Object> t : tableList) {\n    String p = (String) t.get(\"table_path\");\n    if (p == null || !paths.add(p)) {\n        throw new IllegalArgumentException(\"null/duplicate table_path: \" + p);\n    }\n}","typeGuard":"static boolean hasUniqueTablePaths(List<JdbcSourceTableConfig> list) {\n    Set<String> s = new HashSet<>();\n    for (JdbcSourceTableConfig c : list) {\n        if (c.getTablePath() == null || !s.add(c.getTablePath())) return false;\n    }\n    return true;\n}","tryCatchPattern":"try {\n    tables = JdbcSourceTableConfig.of(config);\n} catch (IllegalArgumentException e) {\n    LOG.error(\"table_list misconfigured: {}\", e.getMessage());\n    throw new ConfigException(e);\n}","preventionTips":["Keep each table entry's table_path distinct (schema.table)","Search config for repeated table_path values before submitting","Never rely on default null table_path; set it explicitly","Generate table_list programmatically from a deduplicated source"],"tags":["jdbc","config-validation","duplicate-key"],"backgroundTag":"invalid-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"}