加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 令人费解的“重复键”错误(PostgreSQL)

发布时间:2020-12-17 04:05:13 所属栏目:百科 来源:网络整理
导读:首先,让我说我理解关系理论,我和 MySQL中的任何人一样称职,但我是一个完整的PostgreSQL菜鸟. 当我尝试将新记录插入到我的服务表中时 – 仅在生产中 – 我得到了这个: ActiveRecord::RecordNotUnique (PGError: ERROR: duplicate key value violates unique
首先,让我说我理解关系理论,我和 MySQL中的任何人一样称职,但我是一个完整的PostgreSQL菜鸟.

当我尝试将新记录插入到我的服务表中时 – 仅在生产中 – 我得到了这个:

ActiveRecord::RecordNotUnique (PGError: ERROR:  duplicate key value violates unique constraint "service_pkey"
: INSERT INTO "service" ("created_at","name","salon_id","updated_at") VALUES ('2011-02-28 02:34:20.054269','Manicure',1,'2011-02-28 02:34:20.054269') RETURNING "id"):
  app/controllers/services_controller.rb:46
  app/controllers/services_controller.rb:45:in `create'

我不明白为什么.它不应该为我自动增加PK吗?

这是表定义:

snip=> d service
                                     Table "public.service"
   Column   |            Type             |                      Modifiers                       
------------+-----------------------------+------------------------------------------------------
 id         | integer                     | not null default nextval('service_id_seq'::regclass)
 name       | character varying(255)      | 
 salon_id   | integer                     | 
 created_at | timestamp without time zone | 
 updated_at | timestamp without time zone | 
Indexes:
    "service_pkey" PRIMARY KEY,btree (id)

这是开发中同一个表的定义,它可以正常工作:

snip_development=> d service
                                     Table "public.service"
   Column   |            Type             |                      Modifiers                       
------------+-----------------------------+------------------------------------------------------
 id         | integer                     | not null default nextval('service_id_seq'::regclass)
 name       | character varying(255)      | 
 salon_id   | integer                     | 
 created_at | timestamp without time zone | 
 updated_at | timestamp without time zone | 
Indexes:
    "service_pkey" PRIMARY KEY,btree (id)

一样!那可能是什么呢?

解决方法

您可能使用数据加载了表,但忽略了将service_id_seq的当前值设置为必需值.您可以只选择SELECT * FROM service_id_seq来检查当前值,并使用setval函数重置它.

例如,SELECT setval(‘service_id_seq’:: regclass,MAX(id))FROM服务;应该将序列重置为表中的当前最大值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读