防止数据库导入后模型ID发生冲突

时间:2014-10-25 10:32:04

标签: ruby-on-rails postgresql

我正在从旧系统导入数据,我需要保持给定表的主键不变。例如,此记录可能存在于遗留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高一个?

0 个答案:

没有答案