Limpeza de Chaves de Idempotência
Limpeza de Chaves de Idempotência
Toda requisição JSON-RPC que carrega um campo idempotencyKey
é registrada na tabela pgarachne.requests pela função
pgarachne.save_idempotency_key(). É isso que torna a
detecção de duplicatas possível — mas também significa que a tabela cresce
sem limite, a menos que um operador execute a limpeza periodicamente.
O PgArachne não executa um agendador em segundo plano por conta própria. As opções mais indicadas:
pg_cron (recomendado se você puder instalar extensões)
-- Run every hour, remove keys older than 24 hours
SELECT cron.schedule(
'pgarachne-idempotency-cleanup',
'0 * * * *',
$$SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);$$
);Cron externo/timer do systemd
Agende uma tarefa de shell que chama a função via psql:
0 * * * * psql "host=... user=... dbname=..." \
-c "SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);" \
>> /var/log/pgarachne-cleanup.log 2>&1Manual/pontual
Você pode chamar a função a qualquer momento a partir do psql, de um script de migração ou de qualquer outro cliente. Ela retorna o número de linhas removidas.
SELECT pgarachne.cleanup_idempotency_keys(); -- default: 24 hours
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);Escolhendo uma janela de retenção
Escolha uma janela confortavelmente maior que o maior intervalo de nova tentativa esperado para seus clientes. Se um cliente com defeito tentar novamente a mesma chave de idempotência 48 horas após a requisição original, uma janela de retenção de 24 horas deixará a duplicata passar silenciosamente.
Para a maioria das implantações, 24 horas é um padrão seguro.