【问题标题】:Postgresql unique violation on primary key when inserting record插入记录时,Postgresql 对主键的唯一违反
【发布时间】:2018-04-15 20:01:50
【问题描述】:

在带有 Postgresql 的 Rails 4.2 中,尝试保存新的 ActiveRecord 对象时出现此错误

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

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

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    事实证明,有时 PG 用来生成主键的计数器可能会搞砸(我不知道是怎么回事),只需将其重置为表中主键的最大值即可。

    我在Jasith Fernando's blog找到了这个答案

    对我来说,这发生在开发数据库中,所以我进入该数据库的控制台,如下所示:

    rails db development
    

    那么需要重置的变量名就是表名加上_id_seq所以重置为最大主键值的命令就是这个

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

    【讨论】:

    • 如果这个问题在生产中出现怎么办?我在生产中遇到了这个问题,但只有几次。 pkey 的顺序也是正确的。 :(
    • 如果问题出现在生产环境中,则在生产数据库中运行 SELECT 语句。它不会更改任何现有的主键。
    • 我告诉你,通过在生产数据库中运行选择查询,pkey 的序列是正确的。此外,我只会在某些时候获得主键违规的唯一性。 @Toby 1 克诺比
    猜你喜欢
    • 2011-05-20
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2011-05-25
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多