The insert_conflict plugin allows handling conflicts due to unique constraints when saving new model instance, using the INSERT ON CONFLICT support in PostgreSQL 9.5+ and SQLite 3.24.0+. Example:
class Album < Sequel::Model plugin :insert_conflict end Album.new(name: 'Foo', copies_sold: 1000). insert_conflict( target: :name, update: {copies_sold: Sequel[:excluded][:b]} ). save
This example will try to insert the album, but if there is an existing album with the name ‘Foo’, this will update the copies_sold attribute for that album. See the PostgreSQL and SQLite adapter documention for the options you can pass to the insert_conflict method.
Usage:
# Make all model subclasses support insert_conflict Sequel::Model.plugin :insert_conflict # Make the Album class support insert_conflict Album.plugin :insert_conflict
Classes and Modules
Public Class methods
configure(model)
[show source]
# File lib/sequel/plugins/insert_conflict.rb 33 def self.configure(model) 34 model.instance_exec do 35 if @dataset && !@dataset.respond_to?(:insert_conflict) 36 raise Error, "#{self}'s dataset does not support insert_conflict" 37 end 38 end 39 end