Что такое UPSERT (ON CONFLICT)?

Middle
893 просмотров
AFK Offer AI

UPSERT — операция INSERT, которая при конфликте (дупликат по уникальному ключу) выполняет UPDATE вместо ошибки. В PostgreSQL это INSERT ... ON CONFLICT (key) DO UPDATE SET ....

INSERT INTO auto_apply_history (job_id, vacancy_id, success)
VALUES ($1, $2, true)
ON CONFLICT (job_id, vacancy_id)
DO UPDATE SET success = EXCLUDED.success, updated_at = NOW();

EXCLUDED — виртуальная таблица с данными, которые пытались вставить. Можно использовать DO NOTHING — просто проигнорировать конфликт. UPSERT атомарен и намного лучше, чем SELECT + INSERT/UPDATE в два шага, потому что нет race condition.

Следующий вопрос

Что такое API gateway?