ValidationException: Ekspresi Pembaruan Tidak Valid

TL;DR — UpdateExpression Anda salah format. Sembilan dari sepuluh kata kunci tersebut merupakan kata kunci khusus (seperti status, name, size) yang digunakan secara langsung — tukar dengan #placeholder di ExpressionAttributeNames. Pesan tersebut menyebutkan token yang sebenarnya.

Apa artinya

Pesan umum:

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 mengurai string ekspresi dan menolak apa pun yang bukan tata bahasa yang valid atau yang mereferensikan placeholder yang tidak terdefinisi.

Mengapa itu terjadi

  • Kata kunci khusus digunakan mentah. DynamoDB memiliki ratusan kata khususstatus, name, size, count, data, year. Digunakan langsung dalam sebuah ekspresi, kata-kata itu menyebabkan kesalahan sintaks. Pemeriksa kata khusus menguji nama atribut Anda terhadap daftar lengkap dan menghasilkan peta aliasnya.
  • Entri ExpressionAttributeNames hilang untuk #name yang Anda referensikan.
  • Entri ExpressionAttributeValues hilang untuk :value yang Anda referensikan.
  • Tata bahasa kata kerja salah — mencampur klausa secara tidak benar (SET, REMOVE, ADD, DELETE masing-masing memiliki sintaksnya sendiri), atau = yang menyimpang.
  • Nama atribut dengan karakter khusus (titik, tanda hubung) digunakan tanpa placeholder.

Bagaimana cara memperbaikinya

  1. Beri alias pada setiap nama atribut melalui ExpressionAttributeNames (#status) — cara ini melewati daftar kata khusus sepenuhnya, jadi memberi alias pada semuanya adalah kebiasaan yang aman.
  2. Definisikan setiap :value yang Anda referensikan di ExpressionAttributeValues.
  3. Gunakan klausa yang tepat. SET untuk menulis/menimpa, REMOVE untuk menghapus atribut, ADD untuk penambahan angka/set atomik, DELETE untuk menghapus dari sebuah set.
  4. Jalankan pemeriksaan kata khusus sebelum Anda merilis. Tempelkan nama atribut Anda ke pemeriksa kata khusus — alat itu menandai setiap nama pada daftar AWS dan mencetak peta #alias yang Anda perlukan.
  5. Bangun ekspresi sekali, salin ke mana-mana. String yang diedit dengan tangan akan menyimpang; hasilkan UpdateExpression lengkap beserta kedua peta atribut dari satu sumber sehingga placeholder tetap berpasangan.

Contoh

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

Cek dulu di DynoTable

Ketika sebuah pembaruan gagal di aplikasi Anda, reproduksi dulu di DynoTable sebelum Anda mengubah kode produksi. Buka tabel dengan ⌘K, pilih itemnya, dan gunakan editor pembaruan sebaris — DynoTable memberi alias pada nama atribut khusus secara otomatis dan menampilkan UpdateExpression yang dihasilkan beserta kedua peta atribut. Staging (⌘S) memungkinkan Anda meninjau suntingan dan menangkap kesalahan sintaks sebelum di-commit.

Untuk perbaikan massal, tempelkan ekspresi yang gagal ke Expression Builder dan bandingkan keluarannya dengan apa yang dikirim SDK Anda. Pergantian profil (⌘P) menjaga uji coba tetap pada akun yang sama dengan sumber kesalahan; gunakan Uji Koneksi pada Pengaturan → Profil untuk memastikan profilnya cocok. Lihat Menghubungkan ke AWS dan Instal untuk penyiapan profil. Periksa silang nama atribut di pemeriksa kata khusus ketika pesan kesalahan menyebut token tertentu seperti status atau data. Memberi alias pada setiap nama atribut — bukan hanya yang khusus — adalah kebiasaan aman yang mencegah kelas kesalahan ini sepenuhnya.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.