pentaho/pentaho-kettle · error · KettleException

GPLoad.Log.ExitValuePsqlPath

Error message

GPLoad.Log.ExitValuePsqlPath

What it means

After execute() waits for the gpload child process, it throws a KettleException using key GPLoad.Log.ExitValuePsqlPath when the process exit value is non-zero (the code's '!= -0' test effectively means '!= 0'). The same key is used for the preceding log line, and the message includes the exit value.

Solutions

  1. Read the gpload process stdout/stderr in the step log to see gpload's own error report.
  2. Fix the underlying gpload failure (connection params, control-file content, data formatting).
  3. Test the identical gpload command manually from the shell as the Pentaho user.
  4. Confirm gpload/psql binaries and GPLOAD_HOME, PATH, LD_LIBRARY_PATH for the executing account.

Example fix

// before: step fails with exit value 2, control file references wrong schema
// after (correct meta)
databaseMeta.setHostname("gpmaster"); databaseMeta.setDBName("analytics"); // matches gpload target
Defensive patterns

Strategy: try-catch

Validate before calling

ProcessBuilder pb = new ProcessBuilder(gploadPath, "--version");
if (pb.start().waitFor() != 0) {
  throw new IllegalStateException("gpload client not runnable on this host");
}

Try / catch

try {
  execute();
} catch (KettleException ke) {
  logError("gpload exited non-zero; check gpload stdout/stderr in step log", ke);
  throw ke;
}

Prevention

When it happens

Trigger: gploadProcess.waitFor() returns any value other than 0 - gpload itself failed (bad control file, connection failure, data errors) and execute() rethrows as a KettleException.

Common situations: Wrong gpload connection settings (host/port/db/user); errors in the generated control file; data format mismatches rejected by gpload; gpload not found by the shell (exit 127).

Understand the failure class

Background: "query failed", "%w: SQL error" — wrapped database query errors in Go libraries explained — this error's family across 3 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/93e2d21fc9461cf6. Report an issue: GitHub.

Appendix: source

Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoad.java:553

      gploadProcess = rt.exec( commandLine );

      // any error message?
      StreamLogger errorLogger = new StreamLogger( gploadProcess.getErrorStream(), "ERROR" );

      // any output?
      StreamLogger outputLogger = new StreamLogger( gploadProcess.getInputStream(), "OUTPUT" );

      // kick them off
      errorLogger.start();
      outputLogger.start();

      if ( wait ) {
        // any error???
        gpLoadExitVal = gploadProcess.waitFor();
        logBasic( BaseMessages.getString( PKG, "GPLoad.Log.ExitValuePsqlPath", "" + gpLoadExitVal ) );
        if ( gpLoadExitVal != -0 ) {
          throw new KettleException( BaseMessages.getString( PKG, "GPLoad.Log.ExitValuePsqlPath", "" + gpLoadExitVal ) );
        }
      }
    } catch ( KettleException ke ) {
      throw ke;
    } catch ( Exception ex ) {
      // Don't throw the message upwards, the message contains the password.
      throw new KettleException( "Error while executing \'" + commandLine + "\'. Exit value = " + gpLoadExitVal );
    }

    return true;
  }

  public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
    meta = (GPLoadMeta) smi;
    data = (GPLoadData) sdi;

    try {
      Object[] r = getRow(); // Get row from input rowset & set row busy!

View on GitHub (pinned to f3058517a1)