代码之家  ›  专栏  ›  技术社区  ›  Toby 1 Kenobi

插入记录时主键上存在Postgresql唯一冲突

  •  2
  • Toby 1 Kenobi  · 技术社区  · 7 年前

    在带有Postgresql的Rails 4.2中,我在尝试保存新的ActiveRecord对象时遇到了这个错误

    PG::UniqueViolation:错误:重复键值违反唯一约束“My\u table\u name\u pkey”

    看起来它试图将记录插入到具有已存在主键的表中。我该怎么处理?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Toby 1 Kenobi    7 年前

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

    我在 Jasith Fernando's blog

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

    rails db development
    

    然后,需要重置的变量的名称是附加了 _id_seq

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