【发布时间】:2018-04-15 20:01:50
【问题描述】:
在带有 Postgresql 的 Rails 4.2 中,尝试保存新的 ActiveRecord 对象时出现此错误
PG::UniqueViolation:错误:重复键值违反唯一约束“My_table_name_pkey”
看起来它正在尝试使用已经存在的主键将记录插入到表中。我该如何解决这个问题?
【问题讨论】:
在带有 Postgresql 的 Rails 4.2 中,尝试保存新的 ActiveRecord 对象时出现此错误
PG::UniqueViolation:错误:重复键值违反唯一约束“My_table_name_pkey”
看起来它正在尝试使用已经存在的主键将记录插入到表中。我该如何解决这个问题?
【问题讨论】:
事实证明,有时 PG 用来生成主键的计数器可能会搞砸(我不知道是怎么回事),只需将其重置为表中主键的最大值即可。
我在Jasith Fernando's blog找到了这个答案
对我来说,这发生在开发数据库中,所以我进入该数据库的控制台,如下所示:
rails db development
那么需要重置的变量名就是表名加上_id_seq所以重置为最大主键值的命令就是这个
SELECT setval('my_table_id_seq', (SELECT MAX(id) FROM my_table));
【讨论】: