ValidationException: Invalid UpdateExpression

TL;DR — Deine UpdateExpression ist fehlerhaft. In neun von zehn Fällen ist es ein direkt benutztes reserviertes Wort (etwa status, name, size) — ersetz es durch einen #platzhalter in ExpressionAttributeNames. Die Meldung nennt das genaue Token.

Was es bedeutet

Typische Meldungen:

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 parst die Expression-Zeichenkette und weist alles ab, was keine gültige Grammatik ist oder einen undefinierten Platzhalter referenziert.

Warum es passiert

  • Reserviertes Schlüsselwort roh verwendet. DynamoDB hat Hunderte reservierter Wörterstatus, name, size, count, data, year. Direkt in einer Expression verwendet, verursachen sie einen Syntaxfehler. Der Reserved-Words-Checker testet deine Attributnamen gegen die vollständige Liste und gibt die Alias-Map aus.
  • Fehlender ExpressionAttributeNames-Eintrag für einen referenzierten #name.
  • Fehlender ExpressionAttributeValues-Eintrag für einen referenzierten :value.
  • Falsche Verb-Grammatik — Klauseln falsch gemischt (SET, REMOVE, ADD, DELETE haben jeweils eine eigene Syntax) oder ein verirrtes =.
  • Attributname mit Sonderzeichen (Punkte, Bindestriche), das ohne Platzhalter verwendet wird.

So behebst du es

  1. Aliase jeden Attributnamen über ExpressionAttributeNames (#status) — das umgeht die Liste reservierter Wörter vollständig, sodass alles zu aliasieren eine sichere Angewohnheit ist.
  2. Definiere jeden :value, den du referenzierst, in ExpressionAttributeValues.
  3. Verwende die richtige Klausel. SET zum Schreiben/Überschreiben, REMOVE zum Löschen eines Attributs, ADD für atomare Zahlen-/Set-Inkremente, DELETE zum Entfernen aus einem Set.
  4. Prüfe auf reservierte Wörter, bevor du deployst. Füge deine Attributnamen in den Reserved-Words-Checker ein — er markiert jeden Namen auf der AWS-Liste und gibt die #alias-Map aus, die du brauchst.
  5. Baue die Expression einmal, kopiere sie überall hin. Ein von Hand bearbeiteter String driftet; generiere die vollständige UpdateExpression plus beide Attribut-Maps aus einer Quelle, damit die Platzhalter gepaart bleiben.

Beispiel

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()}
  })
);

Zuerst in DynoTable prüfen

When an update fails in your app, reproduce it in DynoTable bevor du change production code. Öffne die Tabelle mit ⌘K, select the item, and use the inline update editor — DynoTable aliases reserved attribute names automatically and shows the generated UpdateExpression with both attribute maps. Staging (⌘S) lets you preview the edit and catch syntax errors before commit.

For batch fixes, paste the failing expression into the Expression Builder and compare its output to what your SDK sends. Profilwechsel (⌘P) keeps test runs on the same account as the error; use Verbindung testen on Einstellungen → Profile to confirm the profile matches. Siehe Mit AWS verbinden und Installation for profile setup. Cross-check attribute names in the reserved words checker when the error names a specific token like status or data. Aliasing every attribute name — not just reserved ones — is a safe habit that prevents this class of error entirely.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.