我正在从旧系统导入数据,我需要保持给定表的主键不变。例如,此记录可能存在于遗留countries
表中:
id | alpha2 | name
––––––––––––––––––––
2 | SE | Sweden
使用ID导入此记录非常简单:
Country.new(id: 2, alpha2: "SE", name: "Sweden").save!
现在该记录存在于系统中。如果我创建新记录而未指定ID:
Country.new(alpha2: "NO", name: "Norway").save!
...然后挪威也存在于系统中,并被分配了1
的ID。
当我尝试创建这样的另一个模型时出现问题:
Country.new(alpha2: "DK", name: "Denmark").save!
因为已存在ID为2
的记录,所以我发生了碰撞,确定AR / PG会引发异常:
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint
有没有办法解决这个问题?我可以要求AR查找下一个可用的 ID吗?我是否应该在数据库导入后尝试更新ID序列,以便为任何新记录提供的ID至少比遗留数据库中找到的最高编号ID高一个?