Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将activerecord导入与公寓gem一起使用时出现重复密钥冲突_Ruby On Rails_Ruby_Activerecord_Apartment Gem - Fatal编程技术网

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