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: :s

DynamoDB 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 riservatestatus, 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 ExpressionAttributeNames mancante per un #name a 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, DELETE hanno ciascuna la propria sintassi) o un = vagante.
  • Nome dell'attributo con caratteri speciali (punti, trattini) utilizzato senza segnaposto.

Come risolverlo

  1. 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.
  2. Definisci ogni :value a cui fai riferimento in ExpressionAttributeValues.
  3. Utilizzare la clausola corretta. SET per scrivere/sovrascrivere, REMOVE per eliminare un attributo, ADD per incrementi di numeri atomici/set, DELETE per rimuovere da un set.
  4. 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 #alias di cui hai bisogno.
  5. Costruisci l'espressione una volta, copiala ovunque. Una stringa modificata a mano va alla deriva; generare l'intera UpdateExpression più 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

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.