Как работает ON CONFLICT DO UPDATE?

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

ON CONFLICT DO UPDATE — часть UPSERT в PostgreSQL. При конфликте по указанному constraint выполняет UPDATE. INSERT INTO stats (page, views) VALUES ('/home', 1) ON CONFLICT (page) DO UPDATE SET views = stats.views + EXCLUDED.views — инкремент счётчика. EXCLUDED содержит значения из VALUES. Можно добавить WHERE в DO UPDATE: ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name WHERE users.updated_at < EXCLUDED.updated_at — обновлять только если новые данные свежее. Это атомарно и потокобезопасно.

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

Strong vs eventual consistency?