DynamoDB: Table already exists

TL;DR — İşlem, hedef tablosunu oluşturmak istiyor ve ad bu hesap + bölgede zaten alınmış. Geri yüklemeler (RestoreTableFromBackup / RestoreTableToPointInTime) TableAlreadyExistsException fırlatır; CreateTable ve ImportTable aynı durumu bir ResourceInUseException olarak bildirir. Yeni bir hedef ad seçin — geri yüklemeler ve içe aktarmalar asla mevcut bir tabloya yazamaz.

Ne anlama gelir

TableAlreadyExistsException: A target table with the specified name already exists
ResourceInUseException: Table already exists: my-table

Geri yükleme ve içe aktarma işlemleri her zaman yepyeni bir tablo oluşturur — canlı bir tabloya birleşemez ya da üzerine yazamaz. Hedef ad, aynı hesap ve bölgede var olan herhangi bir tabloya (durumu ne olursa olsun) çözümlenirse, istek en baştan başarısız olur. Gördüğünüz istisna API'ye bağlıdır: geri yükleme ailesinin kendi TableAlreadyExistsException'ı vardır, CreateTable ve ImportTable ise genel ResourceInUseException'ı gösterir.

Neden olur

  • Bir yedeği orijinal adın üzerine geri yüklemek — doğal içgüdü ("tablomu geri koy") hâlâ var olan tabloyla çakışır.
  • Bir içe aktarmayı ya da IaC dağıtımını yeniden çalıştırmak — yeniden denenmiş bir ImportTable ya da yığının durumu dışında zaten var olan bir tabloyu oluşturmaya çalışan bir CloudFormation/Terraform/CDK yığını.
  • Bir oluştur-sonra-yeniden-dene yarışı — ilk CreateTable başarılı oldu (ya da hâlâ CREATING) ve yeniden deneme adı alınmış bulur.
  • Ortam çakışması — iki aşama/ortam bir hesabı paylaşıyor ve her ikisi de öneksiz adı istiyor.

Nasıl düzeltilir

  1. Yeni bir ada geri yükleyin, sonra geçiş yapınmy-table-restored olarak geri yükleyin, veriyi doğrulayın, uygulamayı yeniden yönlendirin (ya da eski tabloyu silin ve gittiğinde orijinal ad altında tekrar geri yükleyin):

    aws dynamodb restore-table-from-backup \
      --target-table-name my-table-restored \
      --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...
  2. Tabloyu değiştirmeyi amaçlıyorsanız, önce mevcut olanı silin ve silme tamamlanana kadar bekleyin — tablo DELETING durumundayken ad alınmış kalır (o zaman denenen bir geri yükleme TableInUseException ile başarısız olur; CreateTable tarafı için ResourceInUseException'a bakın).

  3. İçe aktarmalar için, kullanılmayan bir hedef ad seçin — ImportTable yalnızca yeni tablolar oluşturur. Mevcut bir tabloya veri yüklemek için, bunun yerine onu BatchWriteItem/PutItem ile yazın.

  4. IaC yeniden denemeleri için, oluşturmayla mücadele etmek yerine mevcut tabloyu yığının durumuna içe aktarın (ya da yeniden adlandırın).

  5. Gerçekte neyin var olduğunu kontrol edin — aynı bölge/hesapta aws dynamodb list-tables, adın gerçekten boş olup olmadığını çözer.

Geçişten önce geri yüklenen bir tabloyu doğrulamak, insanların atladığı güvenli adımdır — DynoTable masaüstü uygulaması, geri yüklenen ve orijinal tabloları yan yana koyar, böylece önce şemayı karşılaştırabilir ve öğeleri kontrol edebilirsiniz. Ve geri yüklenen tablonun çalıştırma maliyetini tahmin ediyorsanız, DynamoDB fiyatlandırma hesaplayıcısı her iki kapasite modunu da kapsar.

İlgili hatalar

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.