铁轨和postgreSQL - 如何使用现有主键更新数据?

时间:2016-01-19 17:50:44

标签: ruby-on-rails postgresql

我想更新Lecture(id, name, etc.)表中的一些数据。

例如,id: 1, name: "first"中有一个数据(Lecture)。

当我输入Lecture.create(id: 1, name: "newer") =>

PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "lectures_pkey"

有没有办法更新数据?

4 个答案:

答案 0 :(得分:2)

试试这个:

linha\[0]\s=\s'13SL(.*)';

在此处查找有关更新的更多信息:http://guides.rubyonrails.org/active_record_basics.html#update

它不起作用的原因是因为id是唯一的。当你使用create时,它试图创建一个id为1的新记录,而不是编辑相同的记录。

答案 1 :(得分:2)

  

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

Lecture.find(1).update(name: "newer")是默认 主键 ,不应 已更改 复制 即可。当您插入具有现有ID的行时,您会收到该错误。

相反,您需要执行以下操作。

id

答案 2 :(得分:1)

您可以使用

  

lec = Lecture.find(1)

     

lec.update_attributes(姓名:"更新")

您收到错误 PG :: UniqueViolation:错误:重复键值违反了唯一约束" lectures_pkey" ,因为您无法创建具有相同ID的记录。 Id是表格中的主键。

答案 3 :(得分:0)

如果您不介意加载记录然后更新记录,那么所有当前答案都是正确的。如果您不需要实际加载记录,只想更新数据库中的数据,则可以执行

Lecture.where(id: 1).update_all(name: "newer")

这将跳过所有验证等,只需对id == 1

的记录数据库中的数据进行直接sql更新