apache/seatunnel · warning
Catalog not found, loading tables from jdbc directly. url
Error message
Catalog not found, loading tables from jdbc directly. url : {} What it means
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.
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.
Example fix
// before url = "jdbc:unknown-db://host:1234/db" // no catalog implementation // after url = "jdbc:mysql://host:3306/db" // recognized dialect with catalog support
Defensive patterns
Strategy: validation
Validate before calling
String scheme = url.split(":")[1];
if (!SUPPORTED_CATALOG_DIALECTS.contains(scheme)) {
log.info("No catalog for dialect {} — direct JDBC table loading will be used", scheme);
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- The catalog: is not supported the…
- The catalog: is not supported the…
- The catalog: is not supported the getListDatabaseSql for…
- The catalog: is not supported the getTableWithConditionSql…
- COMMON-17
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/984a58d7f0b3c3bf.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/utils/JdbcCatalogUtils.java:164
tableConfig.getTablePath(), jdbcDialect.dialectName(), e);
} else {
throw wrapThrowable(e);
}
}
}
if (!unsupportedTable.isEmpty()) {
throw CommonError.getCatalogTablesWithUnsupportedType(
jdbcDialect.dialectName(), unsupportedTable);
}
log.info(
"Loaded {} catalog tables for catalog : {}",
tables.size(),
jdbcCatalog.getClass());
}
return tables;
}
log.warn(
"Catalog not found, loading tables from jdbc directly. url : {}",
jdbcConnectionConfig.getUrl());
try (Connection connection = getConnection(jdbcConnectionConfig, jdbcDialect)) {
log.info("Loading catalog tables for jdbc : {}", jdbcConnectionConfig.getUrl());
for (JdbcSourceTableConfig tableConfig : tablesConfig) {
try {
CatalogTable catalogTable =
getCatalogTable(tableConfig, connection, jdbcDialect);
TablePath tablePath = catalogTable.getTableId().toTablePath();
JdbcSourceTable jdbcSourceTable =
JdbcSourceTable.builder()
.tablePath(tablePath)
.query(tableConfig.getQuery())
.partitionColumn(tableConfig.getPartitionColumn())
.partitionNumber(tableConfig.getPartitionNumber())
.partitionStart(tableConfig.getPartitionStart())
.partitionEnd(tableConfig.getPartitionEnd())
.useSelectCount(tableConfig.getUseSelectCount())View on GitHub (pinned to cf67b549a7)