插入记录时Postgresql对主键的唯一违规

时间:2017-11-03 06:36:44

标签: ruby-on-rails postgresql

在使用Postgresql的Rails 4.2中,我在尝试保存新的ActiveRecord对象时遇到此错误

  

PG :: UniqueViolation:错误:重复键值违反唯一约束'My_table_name_pkey'

看起来它正在尝试使用已存在的主键将记录插入表中。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

事实证明,计数器PG用于生成主键的时间可能会搞砸(我不知道如何),并且需要将其重置为表中主键的最大值。

我在Jasith Fernando's blog

中找到了这个答案

对我来说,这发生在开发数据库中,所以我进入了这个数据库的控制台:

rails db development

然后需要重置的变量的名称是附加_id_seq的表的名称,因此将其重置为最大主键值的命令是

SELECT setval('my_table_id_seq', (SELECT MAX(id) FROM my_table));