{"record":{"id":"0569e06e56a33343","repo":"flowable/flowable-engine","slug":"no-flowable-tables-in-db-set-property-name-data","errorCode":null,"errorMessage":"no flowable tables in db. set <property name=\"databaseSchemaUpdate\" to value=\"true\" or value=\"create-drop\" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for automatic schema creation","messagePattern":"no flowable tables in db\\. set <property name=\"databaseSchemaUpdate\" to value=\"true\" or value=\"create-drop\" \\(use create-drop for testing only!\\) in bean processEngineConfiguration in flowable\\.cfg\\.xml for automatic schema creation","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"critical","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/db/ProcessDbSchemaManager.java","lineNumber":58,"sourceCode":"            if (!ProcessEngine.VERSION.equals(dbVersion)) {\n                throw new FlowableWrongDbException(ProcessEngine.VERSION, dbVersion);\n            }\n\n            String errorMessage = null;\n            if (!isEngineTablePresent()) {\n                errorMessage = addMissingComponent(errorMessage, \"engine\");\n            }\n            if (CommandContextUtil.getDbSqlSession().getDbSqlSessionFactory().isDbHistoryUsed() && !isHistoryTablePresent()) {\n                errorMessage = addMissingComponent(errorMessage, \"history\");\n            }\n\n            if (errorMessage != null) {\n                throw new FlowableException(\"Flowable database problem: \" + errorMessage);\n            }\n\n        } catch (Exception e) {\n            if (isMissingTablesException(e)) {\n                throw new FlowableException(\n                        \"no flowable tables in db. set <property name=\\\"databaseSchemaUpdate\\\" to value=\\\"true\\\" or value=\\\"create-drop\\\" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for automatic schema creation\",\n                        e);\n            } else {\n                if (e instanceof RuntimeException) {\n                    throw (RuntimeException) e;\n                } else {\n                    throw new FlowableException(\"couldn't get db schema version\", e);\n                }\n            }\n        }\n\n        logger.debug(\"flowable db schema check successful\");\n    }\n\n    protected String addMissingComponent(String missingComponents, String component) {\n        if (missingComponents == null) {\n            return \"Tables missing for component(s) \" + component;\n        }","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/db/ProcessDbSchemaManager.java#L40-L76","documentation":"Thrown when schemaCheckVersion catches an exception that the engine classifies as 'missing tables' (isMissingTablesException), i.e. the database contains no Flowable tables at all. The message instructs the developer to enable automatic schema creation via databaseSchemaUpdate because the DB was never initialized.","triggerScenarios":"Starting the engine with databaseSchemaUpdate=false against an empty/fresh database; querying Flowable tables before schema creation ran; pointing at a schema in another database where no tables exist.","commonSituations":"First deployment against a brand-new database; CI running tests with validate mode; connecting to a fresh RDS/cloud DB instance without running the DDL.","solutions":["Set databaseSchemaUpdate=true (or create-drop for tests) and restart so Flowable creates its schema.","Or manually run the create DDL scripts for your database and engine version, keeping databaseSchemaUpdate=false afterwards.","Verify the JDBC user has CREATE TABLE privileges so automatic creation can succeed."],"exampleFix":"// before\n<property name=\"databaseSchemaUpdate\" value=\"false\"/> <!-- empty DB -->\n// after\n<property name=\"databaseSchemaUpdate\" value=\"true\"/> <!-- first boot creates schema; optionally revert after -->","handlingStrategy":"validation","validationCode":"try (Connection c = ds.getConnection()) { ResultSet rs = c.getMetaData().getTables(null, null, \"ACT_GE_PROPERTY\", null); if (!rs.next()) { cfg.setDatabaseSchemaUpdate(\"true\"); } }","typeGuard":null,"tryCatchPattern":"try { engine = cfg.buildProcessEngine(); } catch (FlowableException e) { if (e.getMessage().startsWith(\"no flowable tables in db\")) { /* enable schema creation */ } }","preventionTips":["On a fresh DB, boot once with databaseSchemaUpdate=true or run the create DDL first","Ensure the DB user has CREATE TABLE privileges","Keep 'create-drop' confined to tests"],"tags":["database","schema","setup"],"backgroundTag":"schema-validation-failed","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}