Limpieza de Claves de Idempotencia

2 min de lectura

Limpieza de Claves de Idempotencia

Toda petición JSON-RPC que incluye un campo idempotencyKey se registra en la tabla pgarachne.requests mediante la función pgarachne.save_idempotency_key(). Esto es lo que permite la detección de duplicados — pero también implica que la tabla crece sin límite a menos que un operador ejecute una limpieza periódicamente.

PgArachne no ejecuta un planificador en segundo plano por sí mismo. Las opciones más recomendables:

pg_cron (recomendado si puede instalar extensiones)

-- 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/temporizador systemd

Programe una tarea de shell que llame a la función mediante psql:

0 * * * * psql "host=... user=... dbname=..." \
  -c "SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);" \
  >> /var/log/pgarachne-cleanup.log 2>&1

Manual/puntual

Puede llamar a la función en cualquier momento desde psql, un script de migración o cualquier otro cliente. Devuelve el número de filas eliminadas.

SELECT pgarachne.cleanup_idempotency_keys();          -- default: 24 hours
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);

Elegir una ventana de retención

Elija una ventana claramente más larga que el intervalo de reintento más largo esperado en sus clientes. Si un cliente con errores reintenta la misma clave de idempotencia 48 horas después de la petición original, una ventana de retención de 24 horas dejará pasar el duplicado sin detectarlo.

Para la mayoría de los despliegues, 24 horas es un valor predeterminado seguro.