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

  1. Read e.getCause() for the underlying repository error and fix that first (connectivity, privileges, disk).
  2. Reconnect to the repository and re-save the transformation.
  3. Ensure the repository schema matches your Pentaho version (apply upgrade scripts).
  4. 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

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


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)