module Sequel::Plugins::InsertConflict

  1. lib/sequel/plugins/insert_conflict.rb

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

Methods

Public Class

  1. configure

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