The table does not have the specified index
TL;DR — Query/Scan'inizdeki IndexName, o tabloda (bu istemcinin bölgesi + hesabından) yok, yanlış yazılmış ya da GSI hâlâ CREATING ve henüz sorgulanabilir değil. Tam indeks adını ve durumunu DescribeTable ile doğrulayın, sonra çağrıyı düzeltin.
Ne anlama gelir
ValidationException: The table does not have the specified index: <IndexName>
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: The table does not have the specified index: no-such-indexDynamoDB'den belirli bir ikincil indeksi adıyla Query veya Scan etmesini istediniz ve tablo (bu istemcinin gördüğü şekilde) kullanılabilir bir durumda o adla bir indekse sahip değil. Ad/durum doğru olana kadar istemci tarafında ve yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.
Neden olur
- Yazım hatası ya da yanlış büyük/küçük harf — indeks adları büyük/küçük harfe duyarlıdır;
GSI1≠gsi1. - İndeks farklı bir tabloya ait —
IndexName'i başka bir tablonun şemasından kopyaladınız. - GSI henüz
ACTIVEdeğil — yeni oluşturulmuş bir global ikincil indeks, durumuCREATING → ACTIVEolana kadar sorgulanamaz (önce geri doldurur). - Yanlış bölge/hesap — istemci, tablonun (ya da indeksinin) olmadığı bir bölgeyi gösteriyor (eksik bir tabloyla aynı hizalanma sorunu).
- DynamoDB Local kayması — indeksten önceki bayat bir yerel
shared-local-instance.db; yeniden oluşturun.
Nasıl düzeltilir
- Gerçek indeks adlarını ve durumunu listeleyin:
aws dynamodb describe-table --table-name <Table> \ --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}" - Adı
IndexName'e birebir kopyalayın — büyük/küçük harfi tam eşleştirin. ACTIVEiçin bekleyin. GSICREATINGise, sorgu yalnızca geri doldurma bittiğinde çalışır (DescribeTable,IndexStatus'u gösterir).aws sts get-caller-identityile bölge + hesabı doğrulayın ve istemcininregion'ını sabitleyin.- DynamoDB Local'de, yerel db dosyasını silin ve tablo/indeks kurulumunuzu yeniden çalıştırın, böylece indeks yerel olarak var olsun.
Birkaç tablo ve indeks arasında mı çalışıyorsunuz? DynoTable'ın Tablo iletişim kutusu her tablonun GSI'lerini ve durumlarını listeler, böylece adı tahmin etmek yerine gerçekten var olan — ve ACTIVE olan — bir indeksi seçebilirsiniz. Ayrıca, ihtiyaç duyduğunuz indeks gerçekten eksik olduğunda bir GSI oluşturur ve siler.
DynoTable’da sorgula
DynoTable'deki tabloyu ⌘K ile açın ve Dizinler panelini genişletin; her GSI adı ve IndexStatus CLI çağrısı olmadan listelenir. Elle IndexName yazmak yerine sorgu panelindeki açılır menüden dizini seçin; DynoTable yalnızca bağlı tabloda bulunan dizinleri sunar.
GSI hâlâ CREATING ise, durum ACTIVE'e dönene kadar kenar çubuğundan tablo meta verilerini yenileyin. Bir GSI sorgusu oluşturmak ve oluşturulan IndexName değerini SDK kodunuza kopyalamak için Query Builder tuşunu kullanın. Dizin bir Bölgede varken diğerinde yoksa profilleri ⌘P ile değiştirin. Kurulum: Connect to AWS, Install.
Kaynaklar
- Managing Global Secondary Indexes in DynamoDB (2026-07-13 tarihinde doğrulandı)
- Query — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- ResourceNotFoundException — yalnızca bir indeks değil, tüm tablo bulunamıyor.
- Query key condition not supported — indeks var ama anahtar koşulunuz onun için yanlış.
- Kod örneği: Query a GSI in Node.js — IndexName doğru bağlanmış.
- Öğrenin: GSI vs LSI · GSIs are eventually consistent · Index'ler
Kaynaklar
- Managing Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.