{"record":{"id":"eec7cb2bbfe927bf","repo":"pentaho/pentaho-kettle","slug":"trans-exception-errorindatabase","errorCode":null,"errorMessage":"Trans.Exception.ErrorInDatabase","messagePattern":"Trans\\.Exception\\.ErrorInDatabase","errorType":"exception","errorClass":"KettleTransException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/Trans.java","lineNumber":2406,"sourceCode":"                    if ( log.isDetailed() ) {\n                      log.logDetailed( BaseMessages.getString( PKG, \"Trans.Log.FoundDateFromTable\", td.getTablename(),\n                        \".\" + td.getFieldname(), \" = \" + maxvalue.toString() ) );\n                    }\n                    if ( maxvalue.getTime() > maxdepdate.getTime() ) {\n                      maxdepdate = maxvalue;\n                    }\n                  } else {\n                    throw new KettleTransException( BaseMessages.getString( PKG,\n                      \"Trans.Exception.UnableToGetDependencyInfoFromDB\", td.getDatabase().getName() + \".\", td\n                        .getTablename() + \".\", td.getFieldname() ) );\n                  }\n                } else {\n                  throw new KettleTransException( BaseMessages.getString( PKG,\n                    \"Trans.Exception.UnableToGetDependencyInfoFromDB\", td.getDatabase().getName() + \".\", td\n                      .getTablename() + \".\", td.getFieldname() ) );\n                }\n              } catch ( KettleException e ) {\n                throw new KettleTransException( BaseMessages.getString( PKG, \"Trans.Exception.ErrorInDatabase\", \"\" + td\n                  .getDatabase() ), e );\n              } finally {\n                depdb.close();\n              }\n            } else {\n              throw new KettleTransException( BaseMessages.getString( PKG, \"Trans.Exception.ConnectionCouldNotBeFound\",\n                \"\" + td.getDatabase() ) );\n            }\n            if ( log.isDetailed() ) {\n              log.logDetailed( BaseMessages.getString( PKG, \"Trans.Log.Maxdepdate\" ) + ( XMLHandler.date2string(\n                maxdepdate ) ) );\n            }\n          }\n\n          // OK, so we now have the maximum depdate;\n          // If it is larger, it means we have to read everything back in again.\n          // Maybe something has changed that we need!\n          //","sourceCodeStart":2388,"sourceCodeEnd":2424,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/Trans.java#L2388-L2424","documentation":"While evaluating a date-range dependency, Trans opens a separate Database (depdb) and queries it. If that query or connection throws a KettleException, it is wrapped in KettleTransException with Trans.Exception.ErrorInDatabase, naming the dependency's database and the underlying cause. The transformation cannot proceed without computing its dependency date.","triggerScenarios":"td.getDatabase() is valid but the depdb connection/query in the dependency loop throws a KettleException (JDBC error, table missing, permissions, network).","commonSituations":"Dependency table lacks the referenced field (SQL error); insufficient SELECT grants; DB unreachable at init time; driver issues for the dependency connection type.","solutions":["Read the cause stack trace for the underlying JDBC error","Verify the dependency table/field exist and the user has SELECT rights","Test the dependency connection connectivity before running","Correct the dependency definition in the transformation settings"],"exampleFix":"// before: dependency field user cannot read\nGRANT SELECT ON staging_log TO public; -- never granted\n// after\nGRANT SELECT ON staging_log TO kettle_user;","handlingStrategy":"validation","validationCode":"for (TransDependency td : transMeta.getDependencies()) {\n  if (td.getDatabase() != null) {\n    try (java.sql.Connection c = td.getDatabase().getConnection(null)) {\n      c.setReadOnly(true);\n      try (java.sql.Statement s = c.createStatement()) {\n        s.execute(\"SELECT \" + td.getFieldname() + \" FROM \" + td.getTablename() + \" WHERE 1=0\");\n      }\n    }\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(args);\n} catch (KettleTransException e) {\n  if (e.getMessage().contains(\"ErrorInDatabase\")) {\n    log.error(\"Dependency DB error: \" + e.getCause().getMessage());\n    // fix grants/schema or connectivity, then retry\n  } else throw e;\n}","preventionTips":["Grant the Kettle user SELECT on dependency tables","Test dependency connections before scheduling","Track schema changes affecting dependency fields","Monitor DB availability ahead of transformation start times"],"tags":["kettle","database","dependency","sql"],"backgroundTag":"sql-query-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}