{"record":{"id":"41d212af82709665","repo":"pentaho/pentaho-kettle","slug":"sequences-are-only-available-for-oracle-databases","errorCode":null,"errorMessage":"Sequences are only available for Oracle databases.","messagePattern":"Sequences are only available for Oracle databases\\.","errorType":"exception","errorClass":"KettleDatabaseException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/database/Database.java","lineNumber":5178,"sourceCode":"  /**\n   * Return all sequence names from connection\n   *\n   * @return The sequences name list.\n   * @throws KettleDatabaseException\n   */\n  public String[] getSequences() throws KettleDatabaseException {\n    if ( databaseMeta.supportsSequences() ) {\n      String sql = databaseMeta.getSQLListOfSequences();\n      if ( sql != null ) {\n        List<Object[]> seqs = getRows( sql, 0 );\n        String[] str = new String[ seqs.size() ];\n        for ( int i = 0; i < seqs.size(); i++ ) {\n          str[ i ] = seqs.get( i )[ 0 ].toString();\n        }\n        return str;\n      }\n    } else {\n      throw new KettleDatabaseException( \"Sequences are only available for Oracle databases.\" );\n    }\n    return null;\n  }\n\n  @Override\n  public String getFilename() {\n    return null;\n  }\n\n  @Override\n  public String getLogChannelId() {\n    return log.getLogChannelId();\n  }\n\n  @Override\n  public String getObjectName() {\n    return databaseMeta.getName();\n  }","sourceCodeStart":5160,"sourceCodeEnd":5196,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/database/Database.java#L5160-L5196","documentation":"Thrown by Database's sequence-listing method (Database.java:5178, getSequences path) when the connected database is not Oracle. Sequence enumeration via getSequences is implemented only for the Oracle dialect; every other database type is explicitly rejected with this hardcoded message.","triggerScenarios":"Calling Database.getSequences() (or methods that enumerate sequences) while databaseMeta is any non-Oracle database type.","commonSituations":"Portable job/transform metadata built for Oracle executed against PostgreSQL/MySQL/SQL Server; generating sequence SQL on databases where the plugin doesn't implement sequence enumeration even though it has sequences (e.g. PostgreSQL, H2).","solutions":["Only call sequence APIs when databaseMeta.getDatabaseType() == DATABASE_TYPE_ORACLE (or supportsSequences())","For non-Oracle databases with sequences, query catalog metadata directly (e.g. information_schema.sequences for PostgreSQL)","Replace sequence lookup with databaseMeta.getNextSequenceValue alternatives where supported","Use a dedicated plugin/dialect that implements sequence enumeration for your DB","Guard the call: check supportsSequences() before invoking"],"exampleFix":"// before\nString[] seqs = database.getSequences();\n// after\nif ( database.getDatabaseMeta().supportsSequences() ) {\n  String[] seqs = database.getSequences();\n} else {\n  // fall back to catalog query or alternative key generation\n}","handlingStrategy":"validation","validationCode":"if ( databaseMeta.getDatabaseType() != DatabaseMeta.TYPE_DATABASE_ORACLE\n  && !databaseMeta.supportsSequences() ) {\n  throw new IllegalStateException( \"Sequence APIs require Oracle; connected to \" + databaseMeta.getPluginName() );\n}","typeGuard":null,"tryCatchPattern":"try {\n  seqs = database.getSequences();\n} catch ( KettleDatabaseException e ) {\n  if ( !databaseMeta.supportsSequences() ) {\n    seqs = listSequencesViaCatalogMetadata( database ); // information_schema fallback\n  } else {\n    throw e;\n  }\n}","preventionTips":["Check supportsSequences()/database type before sequence APIs","Provide catalog-based fallbacks (information_schema.sequences) for PostgreSQL/H2","Keep metadata portable; flag Oracle-only features in design","Use auto-increment/identity columns instead of sequences on non-Oracle DBs"],"tags":["database","oracle","sequences","unsupported-dialect"],"backgroundTag":"unsupported-operation","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"}