pentaho/pentaho-kettle · error · KettleException
GetTableNamesMeta.Exception.UnableToSaveStepInfo
GetTableNamesMeta.Exception.UnableToSaveStepInfo
Error message
GetTableNamesMeta.Exception.UnableToSaveStepInfo
What it means
GetTableNamesMeta.saveRep writes the step's many boolean/string settings (includeTable, includeProcedure, includeSynonym, addSchemaInOutput, dynamicSchema, schemaNameField, etc.) via rep.saveStepAttribute and wraps any failure in a KettleException with this localized message plus id_step appended. The original repository error is preserved as the cause.
Solutions
- Read e.getCause() for the underlying repository error and fix that first (connectivity, privileges, disk).
- Reconnect to the repository and re-save the transformation.
- Ensure the repository schema matches your Pentaho version (apply upgrade scripts).
- Grant the repository user INSERT/UPDATE rights on the step attribute tables.
Example fix
// before: save fails with no diagnostics
meta.saveRep( rep, metaStore, id_transformation, id_step );
// after
try {
meta.saveRep( rep, metaStore, id_transformation, id_step );
} catch ( KettleException e ) {
logError( "Save failed for id_step=" + id_step + ": " + e.getCause() );
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
if ( rep == null || !rep.isConnected() ) {
throw new IllegalStateException( "Repository not connected before saveRep" );
} Try / catch
try {
meta.saveRep( rep, metaStore, idTrans, idStep );
} catch ( KettleException e ) {
logError( "Save failed for id_step=" + idStep + ": " + e.getCause() );
// fix repository access, then retry
} Prevention
- Ensure sufficient disk space on the repository DB host.
- Use a repository account with INSERT/UPDATE rights.
- Keep the repository schema at the matching Pentaho version.
When it happens
Trigger: Any saveStepAttribute call inside saveRep throws — repository unavailable, R_STEP_ATTRIBUTE table missing or locked, insufficient privileges, or transaction rollback while saving the transformation.
Common situations: DB repository connection dropped mid-save; read-only repository user; repository schema not upgraded to current version; disk full on the repository database server.
Related errors
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFro…
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
- GPBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
- InsertUpdateMeta.Exception.UnexpectedErrorReadingStepInfoFro…
- LucidDBStreamingLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b8144bc97069a34f.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/gettablenames/GetTableNamesMeta.java:461
rep.saveStepAttribute( id_transformation, id_step, "objecttypefieldname", objecttypefieldname );
rep.saveStepAttribute( id_transformation, id_step, "sqlcreationfieldname", sqlcreationfieldname );
rep.saveStepAttribute( id_transformation, id_step, "issystemobjectfieldname", issystemobjectfieldname );
// Also, save the step-database relationship!
if ( database != null ) {
rep.insertStepDatabase( id_transformation, id_step, database.getObjectId() );
}
rep.saveStepAttribute( id_transformation, id_step, "includeCatalog", includeCatalog );
rep.saveStepAttribute( id_transformation, id_step, "includeSchema", includeSchema );
rep.saveStepAttribute( id_transformation, id_step, "includeTable", includeTable );
rep.saveStepAttribute( id_transformation, id_step, "includeView", includeView );
rep.saveStepAttribute( id_transformation, id_step, "includeProcedure", includeProcedure );
rep.saveStepAttribute( id_transformation, id_step, "includeSynonym", includeSynonym );
rep.saveStepAttribute( id_transformation, id_step, "addSchemaInOutput", addSchemaInOutput );
rep.saveStepAttribute( id_transformation, id_step, "dynamicSchema", dynamicSchema );
rep.saveStepAttribute( id_transformation, id_step, "schemaNameField", schemaNameField );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "GetTableNamesMeta.Exception.UnableToSaveStepInfo" )
+ id_step, e );
}
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
String error_message = "";
if ( database == null ) {
error_message = BaseMessages.getString( PKG, "GetTableNamesMeta.CheckResult.InvalidConnection" );
cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );
remarks.add( cr );
}
if ( Utils.isEmpty( tablenamefieldname ) ) {
error_message = BaseMessages.getString( PKG, "GetTableNamesMeta.CheckResult.TablenameFieldNameMissing" );
cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );View on GitHub (pinned to f3058517a1)