A solicitação de transação não pode incluir múltiplas operações em um item

TL;DR — Duas ações na mesma solicitação TransactWriteItems têm como alvo o mesmo item (mesma chave primária). O DynamoDB exige que cada item em uma transação seja único, portanto, ele rejeita toda a chamada antes de executar qualquer uma delas. Recolha as ações duplicadas em uma ou mova uma delas para uma gravação separada.

O que significa

ValidationException: Transaction request cannot include multiple operations on one item

Uma solicitação TransactWriteItems agrupa até 100 ações (Put, Update, Delete, ConditionCheck) que são todas confirmadas ou todas falham. Uma regra rígida do API é que não há duas ações que possam ter como alvo o mesmo item — o DynamoDB identifica um item por sua chave primária completa e cada chave pode aparecer no máximo uma vez. Este é um HTTP 400 ValidationException, capturado antes da execução da transação e não pode ser repetida no estado em que se encontra.

Por que isso acontece

  • Um ConditionCheck mais uma gravação na mesma chave — você tentou afirmar uma condição em um item e também Update/Delete na mesma transação. Em vez disso, adicione a condição ao ConditionExpression da gravação.
  • Duas escritas na mesma chave — por ex. um Put e um Update para o mesmo item, geralmente de um loop que não desduplica por chave.
  • Um lote gerado com chaves duplicadas — um ORM ou camada de mapeamento emitiu a mesma partição+chave de classificação duas vezes.
  • Mesma chave em duas ações diferentes em tabelas que você pensa são diferentes — o item é exclusivamente {table, PK, SK}; uma repetição na mesma tabela a aciona.

Como corrigir

  1. Desduplicar por chave primária antes de criar a transação — cada {PK, SK} pode aparecer uma vez.
  2. Mesclar um ConditionCheck na gravação que ele protege: coloque a asserção no próprio ConditionExpression desse item em vez de adicionar uma ação ConditionCheck separada.
  3. Combine duas mutações em um Update usando um único UpdateExpression (SET/ADD/REMOVE) em vez de duas ações.
  4. Dividir a lógica inevitável de várias etapas em transações ou escritas separadas se as operações realmente não puderem ser expressas como uma ação.
  5. Registre as chaves primárias em seu array TransactItems. É fácil perder chaves duplicadas em lotes gerados — imprima cada {PK, SK} antes de enviar.

Confira primeiro no DynoTable

Antes de construir uma transação de vários itens, liste as chaves de destino em DynoTable — abra a tabela com ⌘K e confirme que cada chave primária é única em sua lista de ações. A preparação (⌘S) permite testar uma transação de item único antes de aumentar a escala.

A condição de mesclagem verifica as escritas usando o Expression Builder. Alternar perfis com ⌘P; consulte Conectar ao AWS e Instalar.

Fontes

Erros relacionados

Referências

Última verificação em 13/07/2026 em relação à documentação oficial do 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.