La tabella non ha l'indice specificato

TL;DR — Il IndexName nel tuo Query/Scan non esiste su quella tabella (dalla regione + account di questo cliente), è scritto male, oppure GSI è ancora CREING e non è ancora possibile interrogarlo. Conferma il nome esatto dell'indice e lo stato con "DescribeTable", quindi correggi la chiamata.

Cosa significa

ValidationException: The table does not have the specified index: <IndexName>

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: The table does not have the specified index: no-such-index

Hai chiesto DynamoDB di Query o Scansionare un indice secondario specifico per nome e la tabella (come la vede questo client) non ha alcun indice con quel nome in uno stato utilizzabile. Si tratta di una ValidationException HTTP 400 — lato client e non riprovabile finché il nome/stato non è corretto.

Perché succede

  • Errore di battitura o maiuscole e minuscole: i nomi degli indici fanno distinzione tra maiuscole e minuscole; "GSI1" ≠ "gsi1".
  • L'indice appartiene a una tabella diversa: hai copiato IndexName dallo schema di un'altra tabella.
  • Il GSI non è ancora ACTIVE: un indice secondario globale appena creato non può essere interrogato finché il suo stato non diventa CREATING → ACTIVE (prima viene riempito).
  • Regione/account errato: il client punta a una regione in cui la tabella (o il suo indice) non esiste (lo stesso problema di formazione di una tabella mancante).
  • DynamoDB Deriva locale: un shared-local-instance.db locale obsoleto che precede l'indice; ricrearlo.

Come risolverlo

  1. Elencare i nomi e lo stato reali dell'indice:
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"
  2. Copia il nome parola per parola in IndexName: corrisponde esattamente a maiuscole e minuscole.
  3. Attendere ACTIVE. Se GSI è CREATING, la query funziona solo al termine del backfill (DescribeTable mostra IndexStatus).
  4. Conferma regione + account con "aws sts get-caller-identity" e aggiungi la "regione" del cliente.
  5. Su DynamoDB Locale, elimina il file db locale ed esegui nuovamente la configurazione della tabella/indice in modo che l'indice esista localmente.
  6. Verificare che la condizione chiave corrisponda allo schema dell'indice. Un nome indice valido con una condizione chiave sugli attributi errati continua a fallire, ma con un errore diverso; escludere prima il nome/stato.

Lavori su più tabelle e indici? La finestra di dialogo Table di DynoTable elenca i GSI di ogni tabella e il loro stato, quindi puoi scegliere un indice che esiste realmente — ed è ACTIVE — invece di indovinare il nome. Inoltre crea ed elimina un GSI quando l'indice che ti serviva manca davvero.

Interroga in DynoTable

Apri la tabella in DynoTable con ⌘K ed espandi il pannello Indici: ogni nome GSI e IndexStatus viene elencato senza una chiamata CLI. Scegli l'indice dal menu a discesa nel pannello delle query invece di digitare manualmente "NomeIndice"; DynoTable offre solo gli indici che esistono sulla tabella connessa.

Se GSI è ancora CREING, aggiorna i metadati della tabella dalla barra laterale finché lo stato non passa a ACTIVE. Utilizza il Query Builder per comporre una query GSI e copiare il IndexName generato nel codice SDK. Cambia profilo con ⌘P quando l'indice esiste in una regione ma non in un'altra. Configurazione: Connetti a AWS, Installa.

Fonti

Errori correlati

Riferimenti

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

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.