PG:Undefined 使用带约束的 activeimport 时出现对象错误

PG:Undefined object error when using activeimport with constraint

我正在尝试使用 ActiveImport 进行更新插入。当 运行 导入时,我试图向它传递一个命名约束,以便告诉它何时更新某些列。

 User.import(
      @import_values,
      on_duplicate_key_update: {
        constraint_name: :index_users_on_uid_and_tenant_id,
        columns: %i[title location_id email active]
      }
    )

上面的代码是我的导入语句,根据 activeimport 文档是正确的。但是,当我 运行 这个时,我得到 PG:UndefinedObject 错误,显示如下:

Caused by PG::UndefinedObject: ERROR:  constraint "index_users_on_uid_and_tenant_id" for table "users" does not exist

但是,在我的 schema.rb 中,在我的用户 table 架构中,约束显然存在:

 t.index ["uid", "tenant_id"], name: "index_users_on_uid_and_tenant_id", unique: true

此外,这个 returns 正确:

ActiveRecord::Base.connection.index_exists?(:users, [:uid, :tenant_id]) => true

任何关于为什么会发生这种情况的帮助都会非常有帮助!

A unique constraint 意味着创建 unique index,但反之则不然。

在你的例子中,你创建了一个unique index而不是unique constraint,所以没有约束“index_users_on_uid_and_tenant_id”,你可以添加一个约束,或者使用conflict_target 明确声明哪些列会发生冲突

User.import(
      @import_values,
      on_duplicate_key_update: {
        conflict_target: [:uid, :tenant_id],
        columns: %i[title location_id email active]
      }
    )