{"record":{"id":"3763e4dea43a4e19","repo":"flowable/flowable-engine","slug":"no-flowable-tables-in-db-set-property-databasesc","errorCode":null,"errorMessage":"No flowable tables in DB. Set property \"databaseSchemaUpdate\" \"true\" or value=\"create-drop\" (use create-drop for testing only!) for automatic schema creation","messagePattern":"No flowable tables in DB\\. Set property \"databaseSchemaUpdate\" \"true\" or value=\"create-drop\" \\(use create-drop for testing only!\\) for automatic schema creation","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/EngineSqlScriptBasedDbSchemaManager.java","lineNumber":66,"sourceCode":"        try {\n            String dbVersion = getDbVersion();\n            String currentVersion = getEngineVersion();\n            if (!currentVersion.equals(dbVersion)) {\n                throw new FlowableWrongDbException(currentVersion, dbVersion);\n            }\n\n            String errorMessage = null;\n            if (!isEngineTablePresent()) {\n                errorMessage = addMissingComponent(errorMessage, context);\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 \\\"databaseSchemaUpdate\\\" \\\"true\\\" or value=\\\"create-drop\\\" (use create-drop for testing only!) 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 \" + context + \" db schema version\", e);\n                }\n            }\n        }\n\n        logger.debug(\"flowable {} db schema check successful\", context);\n    }\n\n    @Override\n    public void schemaCreate() {\n\n        if (lockConfiguration.isUseLockForDatabaseSchemaUpdate()) {","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/EngineSqlScriptBasedDbSchemaManager.java#L48-L84","documentation":"Thrown by Flowable's schema version check when the engine connects to a database in which none of the Flowable tables exist. The schema check ('create' or 'true' mode expected tables, queried the metadata, and the lookup failed with a missing-tables exception). Flowable deliberately refuses to run against an empty/uninitialized schema rather than failing later with cryptic SQL errors.","triggerScenarios":"Calling engine configuration init (e.g. ProcessEngineConfiguration.buildProcessEngine()) with databaseSchemaUpdate set to \"false\" (or unset) while the target database/schema has no ACT_* / FLW_* tables; pointing the JDBC URL at the wrong or empty schema/catalog; the DB user lacks rights to see the tables in another schema.","commonSituations":"Fresh environment where SQL scripts were never run; switching datasource to a new database; H2/in-memory DB recreated per test with schema update disabled; wrong default schema for Oracle/Postgres users; tables created in one schema but connection resolves to another.","solutions":["Set databaseSchemaUpdate=\"true\" (auto-create/upgrade on boot) or \"create-drop\" (testing only) in your engine configuration or flowable.cfg.xml.","Create the schema manually by executing the SQL scripts for your database from the Flowable distribution (org/flowable/db/create/).","Verify the JDBC URL points to the database/schema where Flowable tables actually live.","Check the DB user's permissions/default schema so it can see the Flowable tables."],"exampleFix":"// before\nProcessEngineConfiguration cfg = ProcessEngineConfiguration\n    .createProcessEngineConfigurationFromResource(\"flowable.cfg.xml\"); // databaseSchemaUpdate=false\n// after\ncfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);","handlingStrategy":"validation","validationCode":"try (Connection c = ds.getConnection(); ResultSet rs = c.getMetaData().getTables(null, null, \"ACT_GE_PROPERTY\", new String[]{\"TABLE\"})) {\n  if (!rs.next()) throw new IllegalStateException(\"Flowable tables missing; set databaseSchemaUpdate=true or run create scripts\");\n}","typeGuard":null,"tryCatchPattern":"catch (FlowableException e) { if (e.getMessage().startsWith(\"No flowable tables\")) { initSchema(); } else { throw e; } }","preventionTips":["Set databaseSchemaUpdate=true in dev/test environments.","Run Flyway/Liquibase-managed Flowable create scripts in production.","Verify JDBC URL and default schema before engine startup.","Smoke-test DB connectivity and table presence in deployment health checks."],"tags":["database","schema","configuration","flowable"],"backgroundTag":"missing-required-config","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}