DynamoDB: Table already exists

TL;DR — 操作想要_建立_它的目標表格,而名稱在這個帳戶 + 區域中已被占用。還原(RestoreTableFromBackup / RestoreTableToPointInTime)拋出 TableAlreadyExistsExceptionCreateTableImportTable 將相同情況回報為 ResourceInUseException。挑選一個新的目標名稱 — 還原與匯入絕不能寫入既有的表格。

這是什麼意思

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

還原與匯入操作總是建立全新的表格 — 它們無法併入或覆寫既有的表格。若目標名稱在同一帳戶與區域中解析為任何既有的表格(無論其狀態),請求就會事先失敗。你看到哪個例外取決於 API:還原家族有自己的 TableAlreadyExistsException,而 CreateTableImportTable 浮現通用的 ResourceInUseException

為什麼會發生

  • 將備份還原到原本的名稱 — 自然的直覺(「把我的表格放回去」)與仍存在的表格衝突。
  • 重新執行匯入或 IaC 部署 — 重試的 ImportTable,或試圖建立一個在堆疊狀態之外已存在的表格的 CloudFormation/Terraform/CDK 堆疊。
  • 建立後重試的競爭 — 第一個 CreateTable 成功了(或仍在 CREATING),而重試發現名稱已被占用。
  • 環境衝突 — 兩個階段/環境共用一個帳戶,且都想要無前綴的名稱。

如何修正

  1. 還原到新名稱,然後切換 — 還原為 my-table-restored、驗證資料、重新指向應用程式(或刪除舊表格,並在它消失後以原本名稱再次還原):

    aws dynamodb restore-table-from-backup \
      --target-table-name my-table-restored \
      --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...
  2. 若你打算替換表格,先刪除既有的並等待刪除完成 — 名稱在表格處於 DELETING 狀態時仍被占用(此時嘗試還原會以 TableInUseException 失敗;CreateTable 那一側參見 ResourceInUseException)。

  3. 對匯入,選擇一個未使用的目標名稱 — ImportTable 只建立新表格。要將資料載入既有表格,改以 BatchWriteItem/PutItem 寫入它。

  4. 對 IaC 重試,將既有表格匯入堆疊的狀態(或改名),而非對抗建立。

  5. 檢查實際存在什麼 — 在同一區域/帳戶執行 aws dynamodb list-tables,確定名稱是否真的空閒。

在切換前驗證還原後的表格是人們跳過的安全步驟 — DynoTable 桌面應用程式將還原後與原本的表格並排,讓你能先比對 schema 並抽查項目。而若你在估算還原後的表格的執行成本,DynamoDB 定價計算器涵蓋兩種容量模式。

相關錯誤

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。