apache/seatunnel · error · DatabaseNotExistException

DATABASE_NOT_EXISTED

DATABASE_NOT_EXISTED

Error message

Database %s does not exist in Catalog %s.

What it means

SapHanaCatalog.listSynonym throws DatabaseNotExistException (DATABASE_NOT_EXISTED) when databaseExists(databaseName) is false before querying SYNONYMS. It signals the caller asked for synonyms in a schema that does not exist (or is not visible to the connection user).

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/saphana/SapHanaCatalog.java:154

        return String.format(
                "SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = '%s'", databaseName);
    }

    @Override
    public String getListViewSql(String databaseName) {
        return String.format(
                "SELECT VIEW_NAME FROM SYS.VIEWS WHERE SCHEMA_NAME = '%s'", databaseName);
    }

    public String getListSynonymSql(String databaseName) {
        return String.format(
                "SELECT SYNONYM_NAME FROM SYNONYMS WHERE SCHEMA_NAME = '%s'", databaseName);
    }

    public List<String> listSynonym(String databaseName)
            throws CatalogException, DatabaseNotExistException {
        if (!databaseExists(databaseName)) {
            throw new DatabaseNotExistException(this.catalogName, databaseName);
        }
        String dbUrl = getUrlFromDatabaseName(databaseName);
        try {
            return queryString(dbUrl, getListSynonymSql(databaseName), this::getTableName);
        } catch (Exception e) {
            throw new CatalogException(
                    String.format("Failed listing database in catalog %s", catalogName), e);
        }
    }

    @Override
    protected String getTableName(ResultSet rs) throws SQLException {
        return rs.getString(1);
    }

    @Override
    protected String getSelectColumnsSql(TablePath tablePath) {
        return String.format(

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Verify the schema exists via SELECT SCHEMA_NAME FROM SCHEMAS or a SQL client
  2. Match HANA's default upper-case identifier convention (quote or uppercase the name)
  3. Confirm the connection targets the correct tenant database
  4. Grant the user metadata visibility on the target schema

Example fix

// before
catalog.getTable(TablePath.of("myschema", "MYTABLE")); // DatabaseNotExistException
// after
catalog.getTable(TablePath.of("MYSCHEMA", "MYTABLE")); // HANA schemas are upper-case
Defensive patterns

Strategy: validation

Validate before calling

// pre-check schema existence in HANA
// SELECT COUNT(*) FROM SCHEMAS WHERE SCHEMA_NAME = ?

Type guard

boolean schemaExists(java.sql.Connection c, String schema) throws SQLException {
    try (var ps = c.prepareStatement("SELECT COUNT(*) FROM SCHEMAS WHERE SCHEMA_NAME = ?")) {
        ps.setString(1, schema.toUpperCase());
        try (var rs = ps.executeQuery()) { return rs.next() && rs.getInt(1) > 0; }
    }
}

Try / catch

try { catalog.getTable(path); } catch (DatabaseNotExistException e) { /* fix schema name/tenant and retry */ }

Prevention

When it happens

Trigger: getTable (or direct calls) invoking listSynonym with a databaseName that has no matching schema in SAP HANA, including case-sensitivity mismatches (HANA identifiers are upper-case by default).

Common situations: Lower-cased schema names not quoted, connecting to wrong HANA tenant/database, user lacking visibility of the target schema, typo in database/schema name.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/e71eda19a6176847. Report an issue: GitHub.