首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用activerecord-import时重复键的冲突

在使用activerecord-import时重复键的冲突
EN

Stack Overflow用户
提问于 2017-11-13 12:28:43
回答 1查看 1K关注 0票数 4

我使用activerecord-import gem在一个DB insert中导入多个记录,在同一个项目中我使用apartment gem创建和使用多个postgres模式,并在多个模式之间实时切换.

这个问题有时是在导入记录之后,会出现冲突的唯一记录ids!

ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR:重复键值违反唯一约束"table_name_“详细信息: key (id)=(43)已经存在。

此冲突仅通过使用活动记录导入宝石发生.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-13 12:28:43

在调试了许多案件之后..。我意识到,这个问题来自活动记录sequence_name后,切换模式公寓创业板。

假设我们有两个模式( schema_1schema_2 ),在通过单元gem切换模式之后,它不会更改DB表的sequence_name!!,如下所示.

代码语言:javascript
复制
Apartment::Tenant.switch! :schema_1
TableName.sequence_name => "schema_1.table_names_id_seq"
Apartment::Tenant.switch! :schema_2
TableName.sequence_name => "schema_1.table_names_id_seq"

因此,在切换到schema_2并使用active-record-import gem之后,它从旧模式中获取序列id!(schema_1) ...可能这个id已经在schema_2中使用了.将是PG::UniqueViolation错误..。

我试着用TableName.create.save做记录.而且它工作得很好!并从当前模式(schema_2)获取新的序列ids。

看起来.create.save会自动刷新sequence_name,但是active-records-导入不会!

在使用sequence_name之前,我通过手动刷新.import来解决这个问题,方法是:

代码语言:javascript
复制
TableName.reset_sequence_name
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47264394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档