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返回一个回复时调用该回调,该回复可以是成功的,也可以是错误的(如果表尚未被删除) –