pentaho/pentaho-kettle · error · KettleException
Unable to save step information to the repository for…
Error message
Unable to save step information to the repository for id_step=" + id_step
What it means
PropertyOutputMeta.saveRep wraps any exception raised while persisting this step's attributes to the Kettle repository into a KettleException. It means the step configuration could not be written to the repository (r_step_attribute insert/update failed). The original cause is chained.
Solutions
- Inspect the chained cause to identify the repository failure
- Verify repository connection is alive and reconnect if needed
- Check the repository user has write privileges on r_step_attribute
- Re-save after fixing; if persistent, export the transformation to XML and re-import
Example fix
// before
transMeta.saveRep(repository, metastore, transObjectId);
// after
try {
transMeta.saveRep(repository, metastore, transObjectId);
} catch (KettleException e) {
if (e.getCause() instanceof SQLException) {
repository.disconnect(); repository.connect(user, pass);
transMeta.saveRep(repository, metastore, transObjectId); // retry once
}
} Defensive patterns
Strategy: try-catch
Validate before calling
if (!repository.isConnected()) throw new KettleException("Repository connection required before saveRep"); Try / catch
try { meta.saveRep(rep, metaStore, transId, stepId); } catch (KettleException e) { logError("Repository save failed: " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage())); repository.disconnect(); throw e; } Prevention
- Verify repository user has INSERT/UPDATE rights on repository tables
- Monitor DB connectivity before long save operations
- Keep attribute values within column size limits
- Export critical transformations to XML as backup
When it happens
Trigger: Calling saveRep() via TransMeta.saveStep or repository save when Repository.saveStepAttribute throws — DB connection lost, repository read-only, transaction rollback, or attribute value too large for the column.
Common situations: Saving a transformation to a database repository whose connection timed out; repository user lacking INSERT/UPDATE privileges on Pentaho repository tables; disk full on the database server.
Related errors
- Unable to save step information to the repository for…
- Unexpected error reading step information from the…
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AnalyticQueryMeta.Exception.UnableToSaveStepInfoToRepository
- DatabaseJoinMeta.Exception.UnableToSaveStepInfo + id_step
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/bbd4a23dcd12c4ca.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java:454
rep.saveStepAttribute( id_transformation, id_step, "keyfield", keyfield );
rep.saveStepAttribute( id_transformation, id_step, "valuefield", valuefield );
rep.saveStepAttribute( id_transformation, id_step, "comment", comment );
rep.saveStepAttribute( id_transformation, id_step, "file_name", fileName );
rep.saveStepAttribute( id_transformation, id_step, "file_extention", extension );
rep.saveStepAttribute( id_transformation, id_step, "file_add_stepnr", stepNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_partnr", partNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_date", dateInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_time", timeInFilename );
rep.saveStepAttribute( id_transformation, id_step, "create_parent_folder", createparentfolder );
rep.saveStepAttribute( id_transformation, id_step, "addtoresult", addToResult );
rep.saveStepAttribute( id_transformation, id_step, "append", append );
rep.saveStepAttribute( id_transformation, id_step, "fileNameInField", fileNameInField );
rep.saveStepAttribute( id_transformation, id_step, "fileNameField", fileNameField );
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
@Override
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;
// Now see what we can find as previous step...
if ( prev != null && prev.size() > 0 ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "PropertyOutputMeta.CheckResult.FieldsReceived", "" + prev.size() ), stepMeta );
remarks.add( cr );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(View on GitHub (pinned to f3058517a1)