{"record":{"id":"c7e633417743abb1","repo":"apache/seatunnel","slug":"table-is-not-found-in-catalog-tables-skip-to-m","errorCode":null,"errorMessage":"Table {} is not found in catalog tables, skip to merge config","messagePattern":"Table (.+?) is not found in catalog tables, skip to merge config","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/utils/CatalogTableUtils.java","lineNumber":60,"sourceCode":"    public static List<CatalogTable> mergeCatalogTableConfig(\n            List<CatalogTable> tables,\n            List<JdbcSourceTableConfig> tableConfigs,\n            Function<String, TablePath> parser) {\n        Map<TablePath, CatalogTable> catalogTableMap =\n                tables.stream()\n                        .collect(Collectors.toMap(t -> t.getTableId().toTablePath(), t -> t));\n        for (JdbcSourceTableConfig catalogTableConfig : tableConfigs) {\n            TablePath tablePath = parser.apply(catalogTableConfig.getTable());\n            CatalogTable catalogTable = catalogTableMap.get(tablePath);\n            if (catalogTable != null) {\n                catalogTable = mergeCatalogTableConfig(catalogTable, catalogTableConfig);\n                catalogTableMap.put(tablePath, catalogTable);\n                log.info(\n                        \"Override primary key({}) for catalog table {}\",\n                        catalogTableConfig.getPrimaryKeys(),\n                        catalogTableConfig.getTable());\n            } else {\n                log.warn(\n                        \"Table {} is not found in catalog tables, skip to merge config\",\n                        catalogTableConfig.getTable());\n            }\n        }\n        return new ArrayList<>(catalogTableMap.values());\n    }\n\n    public static CatalogTable mergeCatalogTableConfig(\n            final CatalogTable table, JdbcSourceTableConfig config) {\n        List<String> columnNames =\n                table.getTableSchema().getColumns().stream()\n                        .map(c -> c.getName())\n                        .collect(Collectors.toList());\n        for (String pk : config.getPrimaryKeys()) {\n            if (!columnNames.contains(pk)) {\n                throw new IllegalArgumentException(\n                        String.format(\n                                \"Primary key(%s) is not in table(%s) columns(%s)\",","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/utils/CatalogTableUtils.java#L42-L78","documentation":"CatalogTableUtils.mergeCatalogTableConfig merges user-provided catalog table configurations (e.g. primary keys, schema info) into discovered CDC catalog tables. If a configured table path does not match any table found by the connector's catalog discovery, the config is skipped with this warning and the table keeps its auto-discovered definition.","triggerScenarios":"A catalog-tables config entry's table path (database.table) doesn't match any table in the discovered catalogTableMap — due to case mismatch, wrong database name, table excluded by table-list filters, or the table not existing at discovery time.","commonSituations":"Typos in table names in the CDC config; configuring primary keys for tables filtered out of table-list; case-sensitive database/table names on the source; upstream table dropped before the job starts.","solutions":["Confirm the table exists on the source and matches the configured path exactly (case-sensitive).","Ensure the table is included in the connector's table-list/table-pattern config so discovery finds it.","Fix the table path in the catalog table config to the fully-qualified name as discovered.","Check connector logs for the discovered table list and align config entries with it."],"exampleFix":"// before\ncatalog-tables = [{ table = \"mydb.users\", primary-keys = [\"id\"] }] // table not discovered\n// after: fix path and include in table-list\ntable-list = [\"mydb.users\"]\ncatalog-tables = [{ table = \"mydb.users\", primary-keys = [\"id\"] }]","handlingStrategy":"validation","validationCode":"// align catalog-tables entries with discovered tables\nSet<String> discovered = discoveredTables();\nList<String> unknown = configuredTables.stream().filter(t -> !discovered.contains(t)).collect(toList());\nif (!unknown.isEmpty()) throw new IllegalArgumentException(\"tables not found: \" + unknown);","typeGuard":"if (!catalogTableMap.containsKey(tablePath)) { LOG.warn(\"skip unknown table {}\", tablePath); return; }","tryCatchPattern":"// warning-only skip; fix table paths instead","preventionTips":["Match table names exactly, including case","Include configured tables in table-list/table-pattern","Log and review the discovered table list on first run","Keep catalog-tables config generated from the source schema"],"tags":["cdc","catalog-table","configuration","table-not-found"],"backgroundTag":"entity-not-found","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"}