ruby-on-rails - PG:使用带有约束的activeimport时出现未定义的对象错误
问题描述
我正在尝试使用 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 中,在我的 users 表模式中,约束显然存在:
t.index ["uid", "tenant_id"], name: "index_users_on_uid_and_tenant_id", unique: true
而且,这将返回 true:
ActiveRecord::Base.connection.index_exists?(:users, [:uid, :tenant_id]) => true
关于为什么会发生这种情况的任何帮助都会非常有帮助!
解决方案
Aunique constraint
意味着创建 a unique index
,但反之则不然。
在您的情况下,您创建了 aunique index
但不是 a 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]
}
)
推荐阅读
- javascript - 正则表达式执行和测试行为不同
- kotlin - 用户在 Kotlin 中的 editText 上键入时如何调用 recyclerview
- mysql - 谁能告诉我如何解决这些错误?
- react-native - React Native - 使用 Facebook 登录 - 出现旧应用名称
- java - 如何使用 Spring MVC 在 JSP 页面中的 DataTable 中实现服务器端处理?
- css - 如何在 input[type] 上覆盖 CSS 类?
- python - 将 AWS 凭证传递给 Google Cloud Dataflow、Python
- php - 为什么 OpenCart 3 中的图像不能通过管理面板加载?
- android - WebView 突然关闭
- r - 更改 R 中数据框列表的列名