DynamoDB: la tabella esiste già

TL;DR — L'operazione vuole creare la sua tabella di destinazione e il nome è già preso in questo account + regione. I ripristini (RestoreTableFromBackup / RestoreTableToPointInTime) lanciano TableAlreadyExistsException; "CreateTable" e "ImportTable" riportano la stessa situazione di "ResourceInUseException". Scegli un nuovo nome di destinazione: i ripristini e le importazioni non potranno mai scrivere in una tabella esistente.

Cosa significa

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

# what the engine actually returns, reproduced against DynamoDB Local:
ResourceInUseException: Cannot create preexisting table

Le operazioni di ripristino e importazione creano sempre una tabella nuova di zecca: non possono unirsi o sovrascriverne una attiva. Se il nome di destinazione si risolve in una qualsiasi tabella esistente (indipendentemente dal suo stato) nello stesso account e nella stessa regione, la richiesta fallisce immediatamente. L'eccezione visualizzata dipende da API: la famiglia di ripristino ha la propria TableAlreadyExistsException, mentre CreateTable e ImportTable presentano la generica ResourceInUseException.

Perché succede

  • Ripristinare un backup sul nome originale — l'istinto naturale ("rimetti a posto la mia tabella") si scontra con la tabella ancora esistente.
  • Riesecuzione di un'importazione o di una distribuzione IaC: un tentativo di "ImportTable" o uno stack CloudFormation/Terraform/CDK che tenta di creare una tabella che già esiste al di fuori dello stato dello stack.
  • Una gara di creazione e riprova: il primo CreateTable è riuscito (o è ancora CREING) e il nuovo tentativo trova il nome preso.
  • Collisione ambientale: due fasi/ambienti condividono un account ed entrambi desiderano il nome senza prefisso.

Come risolverlo

  1. Ripristina con un nuovo nome, quindi taglia — ripristina come my-table-restored, verifica i dati, reindirizza l'applicazione (o elimina la vecchia tabella e ripristinala nuovamente con il nome originale una volta scomparsa):

    aws dynamodb restore-table-from-backup \
      --target-table-name my-table-restored \
      --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...
  2. Se intendi sostituire la tabella, elimina prima quella esistente e attendi fino al completamento dell'eliminazione: il nome rimane in uso mentre la tabella è nello stato DELETING (un tentativo di ripristino fallisce con TableInUseException; vedi ResourceInUseException per il lato CreateTable).

  3. Per le importazioni, scegli un nome di destinazione non utilizzato: "ImportTable" crea solo nuove tabelle. Per caricare i dati in una tabella esistente, scrivili invece con BatchWriteItem/PutItem.

  4. Per i tentativi IaC, importa la tabella esistente nello stato dello stack (o rinominala), anziché contrastare la creazione.

  5. Controlla cosa esiste effettivamente: aws dynamodb list-tables nella stessa regione/account determina se il nome è veramente libero.

  6. Aggiungi alle tabelle ripristinate il suffisso con la data (orders-20260812-restore) in modo che il ritaglio e la pulizia siano inequivocabili.

Misura in DynoTable

Prima del taglio, apri sia la tabella originale che quella ripristinata in DynoTable — cambia con ⌘K e controlla gli elementi uno accanto all'altro. La gestione temporanea (⌘S) consente di testare le scritture rispetto alla copia ripristinata senza toccare il traffico di produzione.

Dimensiona la tabella ripristinata con il calcolatore dei prezzi. Cambia account/regione con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.