Ruby on rails 将activerecord导入与公寓gem一起使用时出现重复密钥冲突
我正在使用Ruby on rails 将activerecord导入与公寓gem一起使用时出现重复密钥冲突,ruby-on-rails,ruby,activerecord,apartment-gem,Ruby On Rails,Ruby,Activerecord,Apartment Gem,我正在使用activerecord importgem在一个DB insert中导入多个记录,在同一个项目中,我正在使用plantgem创建和使用多个postgres模式,并在多个模式之间实时切换 问题是有时导入记录后,会出现唯一记录ID冲突 ActiveRecord::RecordNotUnique:PG::UniqueViolation:错误:重复 键值违反唯一约束“表名称”详细信息:键 (id)=(43)已存在 只有在调试了许多案例后,才使用active record import gem
activerecord import
gem在一个DB insert中导入多个记录,在同一个项目中,我正在使用plant
gem创建和使用多个postgres模式,并在多个模式之间实时切换
问题是有时导入记录后,会出现唯一记录ID冲突
ActiveRecord::RecordNotUnique:PG::UniqueViolation:错误:重复
键值违反唯一约束“表名称”详细信息:键
(id)=(43)已存在
只有在调试了许多案例后,才使用active record import gem…发生此冲突。。。我意识到问题来自于公寓gem切换模式后的活动记录
sequence\u name
假设我们有两个模式schema_1
和schema_2
,在通过单元gem切换模式后,它不会更改DB table的序列名称!!,就像下面
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
并使用activerecord import
gem之后,它从旧模式中获取序列id!(模式1)。。。可能这个id已经在schema_2中使用了。。。并且将是PG::uniqueinvalition
error
我尝试通过TableName.create
或.save
创建记录。。。而且它工作正常!以及从当前模式(模式2)获取新的序列ID
看起来像是。创建和。保存自动刷新序列名称,但活动记录导入不会
我在使用.import
之前手动刷新sequence\u name
解决了这个问题,方法是:
TableName.reset_sequence_name