UPSERT — это операция, которая делает INSERT, а если возникает конфликт по уникальному ключу, обновляет существующую строку через ON CONFLICT. В PostgreSQL это удобный способ безопасно вставлять или обновлять данные одной командой.
UPSERT — это операция, которая делает INSERT, а если возникает конфликт по уникальному ключу, обновляет существующую строку через ON CONFLICT. В PostgreSQL это удобный способ безопасно вставлять или обновлять данные одной командой.
Что такое UPSERT
UPSERT — это сочетание INSERT и UPDATE. Если строки ещё нет, она вставляется, а если конфликтует уникальный ключ, существующая строка обновляется.
Как это выглядит в PostgreSQL
INSERT INTO users (id, email, name)
VALUES (1, 'test@example.com', 'Test')
ON CONFLICT (id)
DO UPDATE SET
email = EXCLUDED.email,
name = EXCLUDED.name;Здесь, если id уже существует, данные обновятся вместо ошибки.
Когда использовать
UPSERT полезен для справочников, синхронизации данных, импортов и идемпотентных операций, где повторная запись не должна падать с ошибкой.
Что важно помнить
нужно, чтобы был уникальный индекс или PRIMARY KEY;
надо понимать, какие поля обновляются при конфликте;
возможны гонки, если логика сложная, поэтому иногда требуется транзакция или дополнительная проверка.
Как ответить на собеседовании
UPSERT — это запись вида INSERT ... ON CONFLICT, которая вставляет строку или обновляет её при конфликте уникального ключа. Это удобно, когда нужна идемпотентная запись без отдельного SELECT перед INSERT.
Оцени свой прогресс