0

使用node.js我嘗試刪除並再次創建dynamoDB表。我需要從表中刪除所有記錄並放入新的,所以我認爲是刪除和重新創建整個表的好方案。我嘗試用這個代碼刪除並創建dynamoDB表

dynamo.deleteTable({ 
     TableName: tableName 
    }, function(err, data){ 
     if (err) { 
      console.log(err); 
     } 
     else { 
      dynamo.createTable({ 
       TableName: tableName, 
       KeySchema: [{ 
        AttributeName: "id", 
        KeyType: "HASH" 
       }], 
       AttributeDefinitions: [{ 
        AttributeName: "id", 
        AttributeType: "S" 
       }], 
       ProvisionedThroughput: { 
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10 
       } 
      }, function(err){ 
       if (err) { 
        console.log(err); 
       } 
       else { 
        // putNewData(data, callback); 
       } 
      }) 
     } 
    }); 

,我得到錯誤ResourceInUseException:表已經存在:

回答

2

這需要一些時間DynamoDB實際刪除表,所以你需要等待,直到該表被刪除。

如果您遇到錯誤ResourceInUseException,這意味着您嘗試重新創建的表尚未被刪除。所以你需要等待一段時間再重試。

如果您沒有更改表中的密鑰,並且您沒有創建新的本地二級索引,則可以使用UpdateTable方法。這裏有一些限制,但:

你一次只能執行下列操作之一:

修改表的配置的吞吐量設置。

在表上啓用或禁用Streams。

從表中刪除全局二級索引。

在表上創建一個新的全局二級索引。一旦索引 開始

回填,您可以使用UpdateTable執行其他操作。

+0

嗯我認爲回調將幫助我。我如何知道表何時被刪除,是一些事件還是隻是設置一些超時和希望是刪除完成? – Nemanja

+1

我建議使用指數回退重試createTable API調用。 Doc:http://docs.aws.amazon.com/general/latest/gr/api-retries.html – Antonio

+0

不幸的是,當表被刪除時沒有事件發生,並且沒有設置的超時將會消除一張桌子。當DynamoDB返回一個回覆時調用該回調,該回復可以是成功的,也可以是錯誤的(如果表尚未被刪除) –