DynamoDB: Table already exists
TL;DR — 操作想要_建立_它的目標表格,而名稱在這個帳戶 + 區域中已被占用。還原(RestoreTableFromBackup / RestoreTableToPointInTime)拋出 TableAlreadyExistsException;CreateTable 與 ImportTable 將相同情況回報為 ResourceInUseException。挑選一個新的目標名稱 — 還原與匯入絕不能寫入既有的表格。
這是什麼意思
TableAlreadyExistsException: A target table with the specified name already exists
ResourceInUseException: Table already exists: my-table還原與匯入操作總是建立全新的表格 — 它們無法併入或覆寫既有的表格。若目標名稱在同一帳戶與區域中解析為任何既有的表格(無論其狀態),請求就會事先失敗。你看到哪個例外取決於 API:還原家族有自己的 TableAlreadyExistsException,而 CreateTable 與 ImportTable 浮現通用的 ResourceInUseException。
為什麼會發生
- 將備份還原到原本的名稱 — 自然的直覺(「把我的表格放回去」)與仍存在的表格衝突。
- 重新執行匯入或 IaC 部署 — 重試的
ImportTable,或試圖建立一個在堆疊狀態之外已存在的表格的 CloudFormation/Terraform/CDK 堆疊。 - 建立後重試的競爭 — 第一個
CreateTable成功了(或仍在CREATING),而重試發現名稱已被占用。 - 環境衝突 — 兩個階段/環境共用一個帳戶,且都想要無前綴的名稱。
如何修正
還原到新名稱,然後切換 — 還原為
my-table-restored、驗證資料、重新指向應用程式(或刪除舊表格,並在它消失後以原本名稱再次還原):aws dynamodb restore-table-from-backup \ --target-table-name my-table-restored \ --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...若你打算替換表格,先刪除既有的並等待刪除完成 — 名稱在表格處於
DELETING狀態時仍被占用(此時嘗試還原會以TableInUseException失敗;CreateTable那一側參見 ResourceInUseException)。對匯入,選擇一個未使用的目標名稱 —
ImportTable只建立新表格。要將資料載入既有表格,改以BatchWriteItem/PutItem寫入它。對 IaC 重試,將既有表格匯入堆疊的狀態(或改名),而非對抗建立。
檢查實際存在什麼 — 在同一區域/帳戶執行
aws dynamodb list-tables,確定名稱是否真的空閒。
在切換前驗證還原後的表格是人們跳過的安全步驟 — DynoTable 桌面應用程式將還原後與原本的表格並排,讓你能先比對 schema 並抽查項目。而若你在估算還原後的表格的執行成本,DynamoDB 定價計算器涵蓋兩種容量模式。
相關錯誤
- ResourceInUseException — 同一衝突的
CreateTable版本。 - Backup not found
- Export requires PITR
- 學習: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
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。