Údržba idempotency klíčů

1 min čtení

Údržba tabulky idempotency klíčů

Každý JSON-RPC požadavek, který nese pole idempotencyKey, je zaznamenán do tabulky pgarachne.requests funkcí pgarachne.save_idempotency_key(). Právě díky tomu funguje detekce duplicit — ale bez pravidelného úklidu tabulka neomezeně roste.

PgArachne samo o sobě neplánuje žádné úlohy na pozadí. Nejčistší možnosti jsou:

pg_cron (doporučeno, pokud můžete instalovat rozšíření)

-- Každou hodinu smaž klíče starší než 24 hodin
SELECT cron.schedule(
  'pgarachne-idempotency-cleanup',
  '0 * * * *',
  $$SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);$$
);

Externí cron/systemd timer

Naplánujte shell job, který zavolá funkci přes psql:

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

Manuálně/ad-hoc

Funkci můžete kdykoli zavolat z psql, migračního skriptu nebo libovolného klienta. Vrací počet smazaných řádků.

SELECT pgarachne.cleanup_idempotency_keys();          -- výchozí: 24 hodin
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);

Volba retenčního okna

Zvolte okno s dostatečnou rezervou nad nejdelším očekávaným retry intervalem vašich klientů. Pokud chybový klient opakuje stejný idempotency klíč 48 hodin po prvním požadavku, 24hodinové okno duplicitu nezachytí a požadavek bude zpracován znovu.

Pro většinu nasazení je 24 hodin bezpečný výchozí bod.