Module: Sequel::Plugins::InsertConflict

Defined in:
lib/sequel/plugins/insert_conflict.rb

Overview

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

Defined Under Namespace

Modules: InstanceMethods

Class Method Summary collapse

Class Method Details

.configure(model) ⇒ Object


33
34
35
36
37
38
39
# File 'lib/sequel/plugins/insert_conflict.rb', line 33

def self.configure(model)
  model.instance_exec do
    if @dataset && !@dataset.respond_to?(:insert_conflict)
      raise Error, "#{self}'s dataset does not support insert_conflict"
    end
  end
end