Вставка нескольких строк в продолжение пропустить, если происходит уникальное ограничение, продолжение Ruby

#sql #ruby #sequel

Вопрос:

Я знаю Dataset#multi_insert и Dataset#insert . вставляет несколько, но есть ли опция, которая может пропустить эту конкретную вставку, когда активируется уникальная проверка ограничения

Ответ №1:

Вы можете использовать insert_conflict метод.

«Обрабатывайте нарушения уникальности при вставке, обновляя конфликтующую строку, используя ПРИ КОНФЛИКТЕ. Без вариантов, использование В КОНФЛИКТЕ НИЧЕГО НЕ ДЕЛАЕТ».

 DB[:table].insert_conflict.insert(a: 1, b: 2)
# INSERT INTO TABLE (a, b) VALUES (1, 2)
# ON CONFLICT DO NOTHING
 

Он также работает с multi_insert

 DB[:table].insert_conflict.multi_insert([{a: 1, b: 2}, {a: 3, b: 4}])
# INSERT INTO TABLE (a, b) VALUES (1, 2), (3, 4)
# ON CONFLICT DO NOTHING