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

  1. No action strictly required: table loading proceeds via direct JDBC metadata queries.
  2. Verify the jdbc URL is recognized (correct scheme, e.g. jdbc:mysql://) so a dialect with catalog support is selected.
  3. Upgrade SeaTunnel if a catalog for your dialect was added in a newer version.
  4. 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

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


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)