PostgreSQL UPSERT: INSERT … ON CONFLICT DO UPDATE для идемпотентной записи
Классический пример UPSERT помогает избежать ошибки «duplicate key» в конкурентной среде. Если sku уже существует, строка обновляется — запрос остаётся идемпотентным и подходит для повторной отправки из сервисов/воркеров без риска дублирования.
-- Таблица с уникальным SKU
CREATE TABLE IF NOT EXISTS products (
id SERIAL PRIMARY KEY,
sku TEXT UNIQUE,
name TEXT NOT NULL,
price_cents INTEGER NOT NULL,
updated_at TIMESTAMP DEFAULT NOW()
);
-- Безболезненно создаём или обновляем запись
INSERT INTO products (sku, name, price_cents)
VALUES ('SKU-001', 'Samurai Katana', 19999)
ON CONFLICT (sku) DO UPDATE
SET name = EXCLUDED.name,
price_cents = EXCLUDED.price_cents,
updated_at = NOW();