The provided starting key is invalid

In breve — Il tuo ExclusiveStartKey non corrisponde al key schema di ciò che stai paginando. Deve contenere esattamente gli attributi chiave che DynamoDB ha restituito in LastEvaluatedKey — la chiave primaria completa, più la chiave dell'indice quando interroghi un GSI/LSI — con gli stessi nomi e tipi. Ripassa LastEvaluatedKey alla lettera; assemblarlo a mano è come questo si rompe.

Cosa significa

ValidationException: The provided starting key is invalid
ValidationException: Exclusive Start Key must have same size as table's key schema

ExclusiveStartKey dice a una Query/Scan dove riprendere. DynamoDB lo valida rispetto al key schema della tabella — o, per una query su indice, la chiave combinata indice-più-tabella che LastEvaluatedKey porta. Attributi mancanti, attributi in più, nomi errati o tipi errati falliscono tutti prima che qualsiasi dato venga letto.

Perché accade

  • Costruire a mano la chiave con solo la partition key — una tabella a chiave composita necessita di partition e sort key nella chiave iniziale.
  • Paginare un indice con solo la chiave della tabellaLastEvaluatedKey su una query GSI/LSI contiene sia gli attributi chiave dell'indice sia la chiave primaria della tabella; devono tornare tutti.
  • Deriva di tipo o nome — la chiave è stata serializzata (JSON, parametro URL, cache) ed è tornata con "42" dove LastEvaluatedKey aveva un numero, o con un campo rinominato.
  • Riutilizzo di una chiave tra query — un LastEvaluatedKey da una tabella/indice passato a una query su un'altra, o alla stessa query dopo che l'assunzione sul key schema è cambiata.
  • Un wrapper che inietta default — un ODM che riempie attributi che pensa appartengano alla chiave può gonfiare la chiave iniziale oltre la dimensione dello schema.

Come correggerlo

  1. Ripassa LastEvaluatedKey intatto:

    let ExclusiveStartKey;
    do {
      const page = await docClient.send(
        new QueryCommand({
          TableName,
          KeyConditionExpression,
          ExpressionAttributeValues,
          ExclusiveStartKey
        })
      );
      items.push(...(page.Items ?? []));
      ExclusiveStartKey = page.LastEvaluatedKey; // verbatim — no rebuild
    } while (ExclusiveStartKey);
  2. Serializzalo senza perdite se attraversa un confine di richiesta — quando il cursore di paginazione va a un browser e torna, codifica l'intero oggetto LastEvaluatedKey (es. base64 del suo JSON) invece di ricostruirlo dai campi dell'Item, e mantieni i tipi numerici come numeri.

  3. Includi ogni attributo chiave per la paginazione su indice — partition/sort key dell'indice e partition/sort key della tabella, esattamente come restituiti.

  4. Non fabbricare un punto di partenza — la paginazione di DynamoDB non ha offset; se ti serve "inizia vicino a X", esprimilo nel KeyConditionExpression (sk > :x) invece che in un ExclusiveStartKey fatto a mano.

Ispezionare cosa contiene effettivamente LastEvaluatedKey per la tua tabella o indice elimina le supposizioni — l'app desktop DynoTable pagina attraverso le query e mostra il cursore grezzo, e il DynamoDB Expression Builder compone la richiesta di query attorno ad esso.

Errori correlati

References

Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

DynoTable è un client desktop veloce per DynamoDB — sfoglia le tabelle, esegui query in stile SQL e modifica gli Item localmente.