ValidationException: Invalid UpdateExpression
TL;DR — UpdateExpression'ınız hatalı biçimlendirilmiş. On seferin dokuzunda doğrudan kullanılan bir ayrılmış sözcüktür (status, name, sana gibi) — onu ExpressionAttributeNames'te bir #placeholder ile değiştirin. Mesaj, tam belirteci adıyla verir.
Ne anlama gelir
Tipik mesajlar:
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 ifade dizesini ayrıştırır ve geçerli dilbilgisi olmayan ya da tanımsız bir yer tutucuya başvuran her şeyi reddeder.
Neden olur
- Çıplak kullanılan ayrılmış sözcük. DynamoDB'nin yüzlerce ayrılmış sözcüğü vardır —
status,name,sana,count,data,year. Bir ifadede doğrudan kullanıldıklarında bir söz dizimi hatasına neden olurlar. Ayrılmış sözcükler denetleyicisi, öznitelik adlarınızı tam listeye karşı sınar ve takma ad haritasını yayar. - Başvurduğunuz bir
#nameiçin eksikExpressionAttributeNamesgirdisi. - Başvurduğunuz bir
:valueiçin eksikExpressionAttributeValuesgirdisi. - Yanlış eylem dilbilgisi — cümleleri yanlış karıştırmak (
SET,REMOVE,ADD,DELETEher birinin kendi söz dizimi vardır) ya da başıboş bir=. - Bir yer tutucu olmadan kullanılan özel karakterli öznitelik adı (noktalar, tireler).
Nasıl düzeltilir
- Her öznitelik adını
ExpressionAttributeNames(#status) aracılığıyla takma adlandırın — ayrılmış sözcük listesini tamamen atlar, bu yüzden her şeyi takma adlandırmak güvenli bir alışkanlıktır. - Başvurduğunuz her
:value'yiExpressionAttributeValues'te tanımlayın. - Doğru cümleyi kullanın. Yazmak/üzerine yazmak için
SET, bir özniteliği silmek içinREMOVE, atomik sayı/küme artırmaları içinADD, bir kümeden kaldırmak içinDELETE.
Örnek
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()}
})
);Önce DynoTable’da kontrol et
Uygulamanızda bir güncelleme başarısız olduğunda, üretim kodunu değiştirmeden önce güncellemeyi DynoTable'de yeniden oluşturun. Tabloyu ⌘K ile açın, öğeyi seçin ve satır içi güncelleme düzenleyicisini kullanın — DynoTable takma adlar ayrılmış öznitelik adlarını otomatik olarak oluşturur ve oluşturulan UpdateExpression'yi her iki öznitelik haritasıyla birlikte gösterir. Aşamalandırma (⌘S), düzenlemeyi önizlemenizi ve işleme koymadan önce sözdizimi hatalarını yakalamanızı sağlar.
Toplu düzeltmeler için, hatalı ifadeyi Expression Builder'e yapıştırın ve çıktısını SDK'nızın gönderdiğiyle karşılaştırın. Profil değiştirme (⌘P), test çalıştırmalarının hatayla aynı hesapta olmasını sağlar; Profilin eşleştiğini doğrulamak için Ayarlar → Profiller bölümündeki Bağlantıyı Test Et seçeneğini kullanın. Profil kurulumu için Connect to AWS ve Install bakın. Hata status veya data gibi belirli bir belirteci adlandırdığında reserved words checker'daki öznitelik adlarını çapraz kontrol edin. Yalnızca ayrılmış olanlara değil, her öznitelik adına takma ad vermek, bu tür hataları tamamen önleyen güvenli bir alışkanlıktır.
Kaynaklar
- Using update expressions in DynamoDB (2026-07-13 tarihinde doğrulandı)
- Reserved words in DynamoDB (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- ExpressionAttributeValues contains invalid value
- ValidationException (genel bakış)
- Kod örneği: UpdateItem in Node.js · Python (boto3) ile — #name'ler ve :value'lerle geçerli bir UpdateExpression.
- Öğrenin: Update expressions · Expression names & values
Kaynaklar
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.