Czyszczenie kluczy idempotencji
Czyszczenie kluczy idempotencji
Każde żądanie JSON-RPC zawierające pole idempotencyKey
jest zapisywane w tabeli pgarachne.requests przez funkcję
pgarachne.save_idempotency_key(). Właśnie to sprawia, że
wykrywanie duplikatów działa — ale oznacza to również, że tabela rośnie bez ograniczeń,
jeśli operator nie uruchamia okresowo czyszczenia.
PgArachne samo nie posiada wewnętrznego harmonogramu zadań w tle. Najczystsze opcje:
pg_cron (zalecane, jeśli możesz instalować rozszerzenia)
-- Uruchamiaj co godzinę, usuń klucze starsze niż 24 godziny
SELECT cron.schedule(
'pgarachne-idempotency-cleanup',
'0 * * * *',
$$SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);$$
);Zewnętrzny cron/timer systemd
Zaplanuj zadanie shell, które wywołuje funkcję przez psql:
0 * * * * psql "host=... user=... dbname=..." \
-c "SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);" \
>> /var/log/pgarachne-cleanup.log 2>&1Ręcznie/ad-hoc
Możesz wywołać tę funkcję w dowolnym momencie z psql, skryptu migracji lub jakiegokolwiek innego klienta. Zwraca liczbę usuniętych wierszy.
SELECT pgarachne.cleanup_idempotency_keys(); -- domyślnie: 24 godziny
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);Wybór okna retencji
Wybierz okno wygodnie dłuższe niż najdłuższy oczekiwany interwał ponownych prób twoich klientów. Jeśli błędnie działający klient powtórzy to samo klucz idempotencji 48 godzin po pierwotnym żądaniu, 24-godzinne okno retencji bezgłośnie przepuści duplikat.
Dla większości wdrożeń 24 godziny to bezpieczna wartość domyślna.