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-tableGeri 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
ImportTableya 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
CreateTablebaş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
Yeni bir ada geri yükleyin, sonra geçiş yapın —
my-table-restoredolarak 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/...Tabloyu değiştirmeyi amaçlıyorsanız, önce mevcut olanı silin ve silme tamamlanana kadar bekleyin — tablo
DELETINGdurumundayken ad alınmış kalır (o zaman denenen bir geri yüklemeTableInUseExceptionile başarısız olur;CreateTabletarafı için ResourceInUseException'a bakın).İçe aktarmalar için, kullanılmayan bir hedef ad seçin —
ImportTableyalnızca yeni tablolar oluşturur. Mevcut bir tabloya veri yüklemek için, bunun yerine onuBatchWriteItem/PutItemile yazın.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).
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
- ResourceInUseException — aynı çakışmanın
CreateTablesürümü. - Backup not found
- Export requires PITR
- Öğrenin: Backups & point-in-time recovery
References
- RestoreTableFromBackup — Amazon DynamoDB API Reference
- RestoreTableToPointInTime — Amazon DynamoDB API Reference
- CreateTable — Amazon DynamoDB API Reference
- Amazon S3 import validation errors — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.