{"record":{"id":"bbd4a23dcd12c4ca","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-for-id-bbd4a2","errorCode":null,"errorMessage":"Unable to save step information to the repository for id_step=\" + id_step","messagePattern":"Unable to save step information to the repository for id_step=\" \\+ id_step","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java","lineNumber":454,"sourceCode":"\n      rep.saveStepAttribute( id_transformation, id_step, \"keyfield\", keyfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"valuefield\", valuefield );\n      rep.saveStepAttribute( id_transformation, id_step, \"comment\", comment );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"file_name\", fileName );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_extention\", extension );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_stepnr\", stepNrInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_partnr\", partNrInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_date\", dateInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_time\", timeInFilename );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"create_parent_folder\", createparentfolder );\n      rep.saveStepAttribute( id_transformation, id_step, \"addtoresult\", addToResult );\n      rep.saveStepAttribute( id_transformation, id_step, \"append\", append );\n      rep.saveStepAttribute( id_transformation, id_step, \"fileNameInField\", fileNameInField );\n      rep.saveStepAttribute( id_transformation, id_step, \"fileNameField\", fileNameField );\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to save step information to the repository for id_step=\" + id_step, e );\n    }\n  }\n\n  @Override\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,\n    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,\n    Repository repository, IMetaStore metaStore ) {\n\n    CheckResult cr;\n    // Now see what we can find as previous step...\n    if ( prev != null && prev.size() > 0 ) {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"PropertyOutputMeta.CheckResult.FieldsReceived\", \"\" + prev.size() ), stepMeta );\n      remarks.add( cr );\n    } else {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(","sourceCodeStart":436,"sourceCodeEnd":472,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java#L436-L472","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\ntransMeta.saveRep(repository, metastore, transObjectId);\n// after\ntry {\n  transMeta.saveRep(repository, metastore, transObjectId);\n} catch (KettleException e) {\n  if (e.getCause() instanceof SQLException) {\n    repository.disconnect(); repository.connect(user, pass);\n    transMeta.saveRep(repository, metastore, transObjectId); // retry once\n  }\n}","handlingStrategy":"try-catch","validationCode":"if (!repository.isConnected()) throw new KettleException(\"Repository connection required before saveRep\");","typeGuard":null,"tryCatchPattern":"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; }","preventionTips":["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"],"tags":["kettle","repository","metadata","serialization"],"backgroundTag":"database-write-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"}