{"record":{"id":"6ed4dd7ed05e624d","repo":"pentaho/pentaho-kettle","slug":"columnexistsmeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"ColumnExistsMeta.Exception.UnableToSaveStepInfo","messagePattern":"ColumnExistsMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/columnexists/ColumnExistsMeta.java","lineNumber":267,"sourceCode":"  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )\n    throws KettleException {\n    try {\n      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, \"id_connection\", database );\n      rep.saveStepAttribute( id_transformation, id_step, \"tablename\", tablename );\n      rep.saveStepAttribute( id_transformation, id_step, \"schemaname\", schemaname );\n      rep.saveStepAttribute( id_transformation, id_step, \"istablenameInfield\", istablenameInfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"tablenamefield\", tablenamefield );\n      rep.saveStepAttribute( id_transformation, id_step, \"columnnamefield\", columnnamefield );\n      rep.saveStepAttribute( id_transformation, id_step, \"resultfieldname\", resultfieldname );\n\n      // Also, save the step-database relationship!\n      if ( database != null ) {\n        rep.insertStepDatabase( id_transformation, id_step, database.getObjectId() );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException(\n          BaseMessages.getString( PKG, \"ColumnExistsMeta.Exception.UnableToSaveStepInfo\" ) + id_step, e );\n    }\n  }\n\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta, RowMetaInterface prev,\n      String[] input, String[] output, RowMetaInterface info, VariableSpace space, Repository repository,\n      IMetaStore metaStore ) {\n    CheckResult cr;\n    String error_message = \"\";\n\n    if ( database == null ) {\n      error_message = BaseMessages.getString( PKG, \"ColumnExistsMeta.CheckResult.InvalidConnection\" );\n      cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );\n      remarks.add( cr );\n    }\n    if ( Utils.isEmpty( resultfieldname ) ) {\n      error_message = BaseMessages.getString( PKG, \"ColumnExistsMeta.CheckResult.ResultFieldMissing\" );\n      cr = new CheckResult( CheckResult.TYPE_RESULT_ERROR, error_message, stepMeta );","sourceCodeStart":249,"sourceCodeEnd":285,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/columnexists/ColumnExistsMeta.java#L249-L285","documentation":"saveRep wraps any exception while persisting the step's settings to the repository into a KettleException 'Unable to save step information... ' + id_step. The step's configuration could not be stored.","triggerScenarios":"rep.saveStepAttribute / insertStepDatabase throw during saveRep — repository connection loss, constraint violation, read-only repo, or invalid id_step/id_transformation.","commonSituations":"Repository database out of disk or locked; saving a transformation into a deleted folder; permission problems on the repository schema.","solutions":["Check repository DB connectivity, credentials and disk space","Retry saving after re-opening the transformation (stale ObjectId)","Save locally as .ktr as a fallback, then re-import to the repository"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-check repository is writable before saving\nrep.connect(null);\n// ensure transformation and step ObjectIds are valid\nif (id_transformation == null || id_step == null) {\n  throw new IllegalStateException(\"Stale ObjectIds: re-open the transformation before saving\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.saveRep(rep, metaStore, null, transName);\n} catch (KettleException e) {\n  log.error(\"Save failed for step \" + id_step + \": \" + e.getCause(), e);\n  // fallback: save locally\n  transMeta.saveAs(Paths.get(transName + \".ktr\").toFile(), \"kettle\", true);\n}","preventionTips":["Check repo disk space and grants before bulk saves","Re-open transformations if ObjectIds become stale","Keep a local .ktr fallback copy"],"tags":["kettle","pdi","repository","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"}