0007 — COPY + TEMP TABLE no upsert em lote¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-06-11 · Decidido em: 2026-05-08
Contexto¶
O UPSERT diff-aware (ver decisão 0006) precisa ser aplicado em lote sobre milhares de linhas por upload, com boa performance.
Decisão¶
O caminho de upsert em lote faz COPY → TEMP TABLE → UPSERT → DELETE: carrega o lote na
temp table via COPY (rápido), depois aplica o UPSERT diff-aware e o DELETE
seletivo a partir dela.
Consequências¶
COPYé a via mais rápida do Postgres para cargas grandes.- Diverge tecnicamente do Comercial, que usa
PreparedStatement.executeBatch— lá isso é necessário para preservar orowCountper-row da métricalinhas_efetivas. Aqui as métricas finas vêm por tabela, de outra forma. - Filosoficamente, os dois fazem a mesma coisa (diff-aware); a técnica difere por um motivo legítimo de cada domínio.
Alternativas consideradas¶
executeBatch(como o Comercial): preservarowCountper-row, mas é mais lento no volume deste projeto e não traz vantagem aqui. Descartado.- INSERT linha a linha: inviável na escala dos uploads reais. Descartado.