Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 39 из 52 · 8 мин
Вставить или обновить: upsert в одну команду.
Загружаю прайс — и падаю на первом же товаре: «duplicate key value violates unique constraint».
Название товара уникально. Скажи, что делать при конфликте: пропустить (DO NOTHING) или обновить (DO UPDATE).
ON CONFLICTINSERT … ON CONFLICT (столбец) … — что делать, если вставка нарушает уникальность. Столбец должен быть уникальным.INSERT INTO categories (name) VALUES ('Бумага'), ('Игрушки')
ON CONFLICT (name) DO NOTHING;
SELECT * FROM categories ORDER BY id;DO NOTHING · DO UPDATEDO NOTHING молча пропускает конфликтную строку. DO UPDATE SET … обновляет уже существующую.INSERT INTO products (name, category_id, price) VALUES ('Пенал', 1, 300)
ON CONFLICT (name) DO UPDATE SET price = EXCLUDED.price
RETURNING id, name, price;EXCLUDEDDO UPDATE псевдотаблица EXCLUDED — это значения, которые пытались вставить.SET price = EXCLUDED.price.Повторяемые загрузки делай через ON CONFLICT: второй запуск должен давать тот же результат, а не ошибку.
Одной командой загрузи прайс: «Пенал» (категория 1) за 300 и новый «Степлер» (категория 1) за 320. Если товар с таким названием уже есть — обнови его цену.
ON CONFLICT — пока нетcategories — категории товаровid, nameproducts — товарыid, name, category_id, price, weight_g, is_available, added_oncustomers — покупателиid, name, email, city, phone, birthday, registered_onstaff — сотрудникиid, name, role, salary, hired_on, manager_idorders — заказыid, customer_id, staff_id, created_at, statusorder_items — позиции заказовorder_id, product_id, quantity, unit_pricereviews — отзывыid, customer_id, product_id, rating, comment, created_onВыберите один ответ.
Что такое EXCLUDED.price в DO UPDATE?
Выберите один ответ.
Что нужно столбцу в ON CONFLICT (name)?
Проверяем состояние обучения…