{"record":{"id":"06adfc03b39a88af","repo":"flowable/flowable-engine","slug":"couldn-t-get-flowable-table-names-using-metadata","errorCode":null,"errorMessage":"couldn't get flowable table names using metadata: \" + e.getMessage()","messagePattern":"couldn't get flowable table names using metadata: \" \\+ e\\.getMessage\\(\\)","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/persistence/entity/TableDataManagerImpl.java","lineNumber":82,"sourceCode":"    @Override\n    public List<String> getTablesPresentInDatabase() {\n        List<String> tableNames = new ArrayList<>();\n        try {\n            Connection connection = getDbSqlSession().getSqlSession().getConnection();\n            DatabaseMetaData databaseMetaData = connection.getMetaData();\n            LOGGER.debug(\"retrieving flowable tables from jdbc metadata\");\n            String databaseTablePrefix = getDbSqlSession().getDbSqlSessionFactory().getDatabaseTablePrefix();\n            String actTableNameFilter = getTableNameFilter(databaseMetaData, databaseTablePrefix, \"ACT\");\n            String flwTableNameFilter = getTableNameFilter(databaseMetaData, databaseTablePrefix, \"FLW\");\n\n            String catalog = getDatabaseCatalog();\n\n            String schema = getDatabaseSchema();\n\n            tableNames.addAll(getTableNames(databaseMetaData, catalog, schema, actTableNameFilter));\n            tableNames.addAll(getTableNames(databaseMetaData, catalog, schema, flwTableNameFilter));\n        } catch (Exception e) {\n            throw new FlowableException(\"couldn't get flowable table names using metadata: \" + e.getMessage(), e);\n        }\n        return tableNames;\n    }\n\n    protected String getTableNameFilter(DatabaseMetaData databaseMetaData, String databaseTablePrefix, String flowableTablePrefix) throws SQLException {\n        // We are using the search string escape for the filter since the underscore character (_) means match any character when used in LIKE.\n        // However, we want to get the tables that do have that charactery literally\n        String tableNameFilter;\n        if (\"postgres\".equals(getDbSqlSession().getDbSqlSessionFactory().getDatabaseType())\n                || \"cockroachdb\".equals(getDbSqlSession().getDbSqlSessionFactory().getDatabaseType())) {\n            tableNameFilter = databaseTablePrefix + flowableTablePrefix.toLowerCase(Locale.ROOT) + databaseMetaData.getSearchStringEscape() + \"_%\";\n        } else {\n            tableNameFilter = databaseTablePrefix + flowableTablePrefix + databaseMetaData.getSearchStringEscape() + \"_%\";\n        }\n\n        return tableNameFilter;\n    }\n","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/persistence/entity/TableDataManagerImpl.java#L64-L100","documentation":"Thrown when Flowable cannot list its table names via JDBC DatabaseMetaData. The method queries metadata with ACT_/FLW_ name filters and rethrows any exception with this message, so the JDBC error text is appended.","triggerScenarios":"Calling getTablesPresentInDatabase() (e.g. from getTableCount() or schema management) when databaseMetaData.getTables() throws: bad catalog/schema, metadata access denied, connection failure, or an unsupported database returning invalid metadata.","commonSituations":"JDBC driver lacks proper DatabaseMetaData support; wrong database schema/catalog configured; user lacks metadata read privileges; typo'd or unsupported database product name in configuration.","solutions":["Read e.getCause()/message for the JDBC metadata error","Set the correct databaseSchema / catalog in the engine configuration","Use a JDBC driver that fully supports DatabaseMetaData for your database","Grant the user permission to read table metadata (e.g. via information_schema)"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"try (Connection c = dataSource.getConnection()) {\n    DatabaseMetaData md = c.getMetaData();\n    md.getTables(null, schema, \"ACT_%\", new String[]{\"TABLE\"}); // probe metadata access\n}","typeGuard":null,"tryCatchPattern":"try {\n    List<String> tables = managementService.getTableNames();\n} catch (FlowableException e) {\n    LOGGER.error(\"Metadata listing failed: {}\", e.getMessage(), e);\n}","preventionTips":["Use a JDBC driver with full DatabaseMetaData support","Configure databaseSchema/catalog correctly","Grant metadata-read privileges (information_schema access)"],"tags":["database","jdbc-metadata","persistence"],"backgroundTag":"database-query-failed","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}