{"record":{"id":"f3497a2762ea944e","repo":"pentaho/pentaho-kettle","slug":"updatemeta-exception-unabletosavestepinfotorepository","errorCode":null,"errorMessage":"UpdateMeta.Exception.UnableToSaveStepInfoToRepository","messagePattern":"UpdateMeta\\.Exception\\.UnableToSaveStepInfoToRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/update/UpdateMeta.java","lineNumber":566,"sourceCode":"\n      for ( int i = 0; i < keyStream.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"key_name\", keyStream[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"key_field\", keyLookup[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"key_condition\", keyCondition[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"key_name2\", keyStream2[i] );\n      }\n\n      for ( int i = 0; i < updateLookup.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"value_name\", updateLookup[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"value_rename\", updateStream[i] );\n      }\n\n      // Also, save the step-database relationship!\n      if ( databaseMeta != null ) {\n        rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"UpdateMeta.Exception.UnableToSaveStepInfoToRepository\" )\n        + id_step, e );\n    }\n  }\n\n  @Override\n  public void getFields( Bowl bowl, RowMetaInterface row, String name, RowMetaInterface[] info, StepMeta nextStep,\n    VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {\n    if ( ignoreFlagField != null && ignoreFlagField.length() > 0 ) {\n      ValueMetaInterface v = new ValueMetaBoolean( ignoreFlagField );\n      v.setOrigin( name );\n\n      row.addValueMeta( v );\n    }\n  }\n\n  @Override\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,","sourceCodeStart":548,"sourceCodeEnd":584,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/update/UpdateMeta.java#L548-L584","documentation":"UpdateMeta.saveRep failed while persisting the Update step's settings to the repository; any Exception is wrapped in a KettleException with the UnableToSaveStepInfoToRepository message (the step id is appended).","triggerScenarios":"saveRep -> rep.saveStepAttribute/insertStepDatabase throws (connection loss, constraint violation, insufficient privileges) while saving a transformation.","commonSituations":"Database repository locked or offline; user lacks INSERT/UPDATE rights on repository tables; duplicate/constraint violations in repository tables.","solutions":["Check the chained cause for the underlying repository SQL error","Verify repository connection and that the user has write privileges on repository tables","Retry saving after resolving connectivity; alternatively export the transformation to XML as a workaround","Check repository table constraints and repair corrupted repository rows"],"exampleFix":"// before\nuser: pdi_read (read-only)\n// after\nuser: pdi_admin (INSERT/UPDATE on r_step_attribute)","handlingStrategy":"try-catch","validationCode":"// Before save, check write access: repository.testConnection() and user INSERT/UPDATE grants on repository tables","typeGuard":null,"tryCatchPattern":"try { transMeta.saveRep(repository, metaStore, id_transformation, id_step); } catch (KettleException e) { log.error(\"Save failed for step \" + id_step + \": \" + e.getCause(), e); }","preventionTips":["Use a repository user with write privileges","Monitor repository DB availability before batch saves","Export to XML as a fallback when repository writes fail"],"tags":["repository","metadata","persistence"],"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"}