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
- Verify the schema exists via SELECT SCHEMA_NAME FROM SCHEMAS or a SQL client
- Match HANA's default upper-case identifier convention (quote or uppercase the name)
- Confirm the connection targets the correct tenant database
- 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
- Use HANA's default upper-case identifiers unless explicitly quoted
- Confirm connection targets the intended tenant database
- Verify user has metadata visibility on the schema before calls
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
- Failed listing database in catalog %s
- Error reading default database charsets: ${e.getMessage()}
- SQL_OPERATION_FAILED
- Failed getting table {tablePath.getFullName()}
- Failed listing database in catalog {this.catalogName}
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e71eda19a6176847.
Report an issue: GitHub.