{"record":{"id":"984a58d7f0b3c3bf","repo":"apache/seatunnel","slug":"catalog-not-found-loading-tables-from-jdbc-direct","errorCode":null,"errorMessage":"Catalog not found, loading tables from jdbc directly. url : {}","messagePattern":"Catalog not found, loading tables from jdbc directly\\. url : (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/utils/JdbcCatalogUtils.java","lineNumber":164,"sourceCode":"                                    tableConfig.getTablePath(), jdbcDialect.dialectName(), e);\n                        } else {\n                            throw wrapThrowable(e);\n                        }\n                    }\n                }\n                if (!unsupportedTable.isEmpty()) {\n                    throw CommonError.getCatalogTablesWithUnsupportedType(\n                            jdbcDialect.dialectName(), unsupportedTable);\n                }\n                log.info(\n                        \"Loaded {} catalog tables for catalog : {}\",\n                        tables.size(),\n                        jdbcCatalog.getClass());\n            }\n            return tables;\n        }\n\n        log.warn(\n                \"Catalog not found, loading tables from jdbc directly. url : {}\",\n                jdbcConnectionConfig.getUrl());\n        try (Connection connection = getConnection(jdbcConnectionConfig, jdbcDialect)) {\n            log.info(\"Loading catalog tables for jdbc : {}\", jdbcConnectionConfig.getUrl());\n            for (JdbcSourceTableConfig tableConfig : tablesConfig) {\n                try {\n                    CatalogTable catalogTable =\n                            getCatalogTable(tableConfig, connection, jdbcDialect);\n                    TablePath tablePath = catalogTable.getTableId().toTablePath();\n                    JdbcSourceTable jdbcSourceTable =\n                            JdbcSourceTable.builder()\n                                    .tablePath(tablePath)\n                                    .query(tableConfig.getQuery())\n                                    .partitionColumn(tableConfig.getPartitionColumn())\n                                    .partitionNumber(tableConfig.getPartitionNumber())\n                                    .partitionStart(tableConfig.getPartitionStart())\n                                    .partitionEnd(tableConfig.getPartitionEnd())\n                                    .useSelectCount(tableConfig.getUseSelectCount())","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/utils/JdbcCatalogUtils.java#L146-L182","documentation":"JdbcCatalogUtils.getTables normally delegates table discovery to a JDBC catalog class matching the dialect. When no matching catalog is found for the URL, it warns and falls back to loading tables directly via JDBC metadata (DatabaseMetaData / dialect-specific queries) for each configured table.","triggerScenarios":"getTables is called with a jdbc URL whose dialect has no dedicated JdbcCatalog implementation, so the catalog branch is skipped and the direct-JDBC fallback path executes for the tables in tablesConfig.","commonSituations":"Using less-common databases (e.g. some dialects without catalog support) or URL patterns the dialect resolver maps to a generic dialect; users see discovery still working but via the slower metadata path.","solutions":["No action strictly required: table loading proceeds via direct JDBC metadata queries.","Verify the jdbc URL is recognized (correct scheme, e.g. jdbc:mysql://) so a dialect with catalog support is selected.","Upgrade SeaTunnel if a catalog for your dialect was added in a newer version.","Check the subsequent logs for per-table load errors; if a table fails, verify tableConfig path/identifier correctness."],"exampleFix":"// before\nurl = \"jdbc:unknown-db://host:1234/db\" // no catalog implementation\n// after\nurl = \"jdbc:mysql://host:3306/db\" // recognized dialect with catalog support","handlingStrategy":"validation","validationCode":"String scheme = url.split(\":\")[1];\nif (!SUPPORTED_CATALOG_DIALECTS.contains(scheme)) {\n    log.info(\"No catalog for dialect {} — direct JDBC table loading will be used\", scheme);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use recognized JDBC URL schemes to get dialect catalog support","Validate table paths in tablesConfig when relying on direct loading","Upgrade SeaTunnel to gain catalog support for newer dialects"],"tags":["jdbc","catalog","table-discovery","fallback"],"backgroundTag":"fallback","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}