Number overflow. Attempting to store a number with magnitude larger than supported range

TL;DR — Seu número está fora dos limites do DynamoDB. O tipo N guarda até 38 dígitos de precisão com uma magnitude entre aproximadamente 1E-130 e 9.9999…E+125. Um valor além desse intervalo — ou um com mais de 38 dígitos significativos — é rejeitado com uma exceção. Armazene IDs grandes e valores de alta precisão como strings, não números.

O que significa

ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported range

O tipo Number do DynamoDB é um decimal com um intervalo limitado e 38 dígitos significativos. Este ValidationException (HTTP 400) significa que o valor que você enviou excede essa magnitude — ou um runtime de linguagem transformou uma string numérica longa em um número de ponto flutuante que estourou o intervalo. Ele não é retentável como número; o valor precisa ser representado de forma diferente.

Por que isso acontece

  • Um número genuinamente enorme — um valor maior que ~9.9E+125 (ou um valor positivo menor em magnitude que 1E-130).
  • Uma string numérica longa convertida para float — por exemplo, um número de conta/referência de 120 dígitos passado por Number() / parseFloat() vira algo como 8.04e+126 e estoura. Este é um gatilho frequente no mundo real.
  • Mais de 38 dígitos significativos — o tipo Number do DynamoDB guarda até 38 dígitos de precisão, e excedê-los resulta em uma exceção.
  • Um valor computado (um produto, uma exponenciação) que cresceu além do intervalo.

Como corrigir

  1. Armazene-o como string (S), não número. Identificadores grandes, números de conta ou hashes sobre os quais você nunca faz cálculos deveriam ser strings — isso desvia tanto do limite de magnitude quanto do teto de 38 dígitos de precisão.
  2. Não converta strings tipo ID para números — mantenha uma referência de 100 dígitos como string de ponta a ponta. Convertê-la para float é o que produz o overflow.
  3. Mantenha atributos numéricos dentro do intervalo — o Number do DynamoDB suporta até 38 dígitos de precisão e magnitude até ~9.9E+125. Projete valores para caber, ou divida/escale-os.
  4. Para decimais de alta precisão, passe números como strings que você converte do seu tipo decimal (Decimal do Python, uma biblioteca de big-decimal) para que a precisão não se perca antes de chegar ao DynamoDB.
  5. Preserve zeros à esquerda / exatidão armazenando como string — o tipo Number normaliza e não consegue manter zeros à esquerda de qualquer forma.

FAQ

Quais são os limites de número do DynamoDB? O tipo Number suporta até 38 dígitos de precisão e uma magnitude de cerca de 1E-130 a 9.9999999999999999999999999999999999999E+125 (positivo) e os negativos desses. Um valor fora desse intervalo levanta "Number overflow."

Como armazeno um número muito grande no DynamoDB? Armazene-o como um atributo de string (S) em vez de Number (N) se você não faz aritmética sobre ele — isso evita o teto de 38 dígitos de precisão e o limite de magnitude inteiramente. Para strings numéricas ordenáveis, preencha-as com zeros à esquerda para que a ordem lexical corresponda à ordem numérica.

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.