ValidationException: UpdateExpression non valida
TL;DR — Il tuo UpdateExpression non ha un formato corretto. Nove volte su dieci si tratta di una parola chiave riservata (come status, name, size) utilizzata direttamente: sostituiscila con un #placeholder in ExpressionAttributeNames. Il messaggio nomina il token esatto.
Cosa significa
Messaggi tipici:
ValidationException: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: status
ValidationException: Invalid UpdateExpression: Syntax error; token: "=", near: "SET status ="
ValidationException: Invalid UpdateExpression: An expression attribute value used in expression is not defined; attribute value: :sDynamoDB analizza la stringa dell'espressione e rifiuta tutto ciò che non è una grammatica valida o fa riferimento a un segnaposto non definito.
Perché succede
- Parola chiave riservata utilizzata in modo grezzo. DynamoDB contiene centinaia di parole riservate —
status,name,size,count,data,year. Utilizzati direttamente in un'espressione causano un errore di sintassi. Il controllo parole riservate verifica i nomi degli attributi rispetto all'elenco completo ed emette la mappa alias. - Voce
ExpressionAttributeNamesmancante per un#namea cui hai fatto riferimento. - Voce "ExpressionAttributeValues" mancante per un ":value" a cui hai fatto riferimento.
- Gramma verbale errata: mescolare le clausole in modo errato (
SET,REMOVE,ADD,DELETEhanno ciascuna la propria sintassi) o un=vagante. - Nome dell'attributo con caratteri speciali (punti, trattini) utilizzato senza segnaposto.
Come risolverlo
- Crea un alias per ogni nome di attributo tramite
ExpressionAttributeNames(#status): elude completamente l'elenco delle parole riservate, quindi creare un alias per tutto è un'abitudine sicura. - Definisci ogni
:valuea cui fai riferimento inExpressionAttributeValues. - Utilizzare la clausola corretta.
SETper scrivere/sovrascrivere,REMOVEper eliminare un attributo,ADDper incrementi di numeri atomici/set,DELETEper rimuovere da un set. - Esegui il controllo delle parole riservate prima della spedizione. Incolla i nomi degli attributi nel controllo parole riservate — contrassegna ogni nome nell'elenco AWS e stampa la mappa
#aliasdi cui hai bisogno. - Costruisci l'espressione una volta, copiala ovunque. Una stringa modificata a mano va alla deriva; generare l'intera
UpdateExpressionpiù entrambe le mappe degli attributi da un'unica fonte in modo che i segnaposto rimangano accoppiati.
Esempio
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';
const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));
await doc.send(
new UpdateCommand({
TableName: 'Orders',
Key: {pk: 'ORDER#1'},
// #status aliases the reserved word "status"
UpdateExpression: 'SET #status = :s, updatedAt = :t',
ExpressionAttributeNames: {'#status': 'status'},
ExpressionAttributeValues: {':s': 'SHIPPED', ':t': Date.now()}
})
);Controlla prima in DynoTable
Quando un aggiornamento non riesce nella tua app, riproducilo in DynoTable prima di modificare il codice di produzione. Apri la tabella con ⌘K, seleziona l'elemento e utilizza l'editor di aggiornamento in linea: DynoTable crea automaticamente gli alias dei nomi degli attributi riservati e mostra l'"UpdateExpression" generato con entrambe le mappe degli attributi. La gestione temporanea (⌘S) consente di visualizzare in anteprima la modifica e rilevare gli errori di sintassi prima del commit.
Per le correzioni batch, incolla l'espressione non riuscita nel Generatore di espressioni e confronta il suo output con quello inviato dall'SDK. Il cambio di profilo (⌘P) mantiene le esecuzioni dei test sullo stesso account dell'errore; utilizzare Verifica connessione in Impostazioni → Profili per confermare le corrispondenze del profilo. Consulta Connetti a AWS e Installa per la configurazione del profilo. Effettua un controllo incrociato dei nomi degli attributi nel controllo parole riservate quando l'errore nomina un token specifico come "status" o "data". L'alias di ogni nome di attributo, non solo di quelli riservati, è un'abitudine sicura che previene completamente questa classe di errori.
Fonti
- Utilizzo delle espressioni di aggiornamento in DynamoDB (verificato il 13-07-2026)
- Parole riservate in DynamoDB (verificato il 13-07-2026)
Errori correlati
- ExpressionAttributeValues contiene un valore non valido
- ValidationException (panoramica)
- Esempio di codice: UpdateItem in Node.js · in Python (boto3) — un UpdateExpression valido con #names e :values.
- Impara: Aggiorna espressioni · Nomi e valori delle espressioni
Riferimenti
- Utilizzo delle espressioni di aggiornamento nella Guida per sviluppatori di Amazon DynamoDB DynamoDB
- Parole riservate in DynamoDB - Guida per sviluppatori di Amazon DynamoDB
- Nomi degli attributi di espressione (alias) in DynamoDB — Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.